08/03/11 19:48:40
とりあえず死兆星おいときますね。
☆
☆
☆
☆
☆
★☆
☆
3:デフォルトの名無しさん
08/03/11 22:09:44
過去スレ
01 スレリンク(tech板)
02 スレリンク(tech板)
03 スレリンク(tech板)
04 スレリンク(tech板)
05 スレリンク(tech板)
4:デフォルトの名無しさん
08/03/12 13:39:54
指定したセル以外の入力を避けたいのですが
Range("C3,E3,D5").Select
Range("D5").Activate
でやると、一応完成するのですが、間違いを消去した時
全てのセルデータまで消えてしまうのですが・・・
どう処理したらいいのでしょう?
質問1っパツ目ではずかしい
5:デフォルトの名無しさん
08/03/12 14:08:31
間違いを消すときに、間違ったセルだけ消せば?
6:デフォルトの名無しさん
08/03/12 14:20:32
>間違ったセルだけ消せば?
これをマクロでしたのです。TEXTBOXを使えば簡単ですけど
あえて使わずして仕上げたいです。
7:デフォルトの名無しさん
08/03/12 14:36:28
・今どういうコードで「間違ったセルを消し」てるのか書け
・TextBoxを使えばどのように簡単になるのか、コードも添えて説明しろ
8:デフォルトの名無しさん
08/03/12 15:22:11
・今どういうコードで「間違ったセルを消し」てるのか書け
ただ、DELETEしてるだけ。
・TextBoxを使えばどのように簡単になるのか、コードも添えて説明しろ
TextBox プロパティで順番つけてるだけだよ。
9:デフォルトの名無しさん
08/03/12 15:35:04
「コード書け」の意味が理解できないのか?
10:デフォルトの名無しさん
08/03/12 16:28:07
Range("C3,E3,D5").Select
Range("D5").Activate
だけでコード書いてないよ。
TextBoxなら
cells(1,1)=textbox1
cells(1,4)=textbox2
cells(2,1)=textbox1
って所かな?あえて書けば・・・
11:デフォルトの名無しさん
08/03/12 16:41:27
>>10
だーかーらー、
>>6
>>間違ったセルだけ消せば?
>これをマクロでしたのです。
これのコードを書けって言ってるの。
>って所かな?あえて書けば・・・
何がどう簡単になったか説明しろって書いただろ?
>>4
>指定したセル以外の入力を避けたい
これの意味が曖昧だから、ちゃんと説明しろってこった。
12:エスパー君登場
08/03/12 16:45:00
つ「シート保護」
13:デフォルトの名無しさん
08/03/12 17:22:49
セルc3の次にセルe3へ入力その後セルd5へ入力またセルc3へ戻る
とエンターキーを押すごとにセルの移動が行われる様にしたい(繰り返し)
これは、例えば、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("C3,E3,D5").Select
Range("D5").Activate
End Sub
で可能。でも、E3に入ったデータのみ修正したい場合C3、D5も消えちゃう
これでは、使い物にならい。
コントロールを使用した場合プロパティで順列の設定を指定しまうので
いちいちコードを書かなくていいから簡単ってこと。
textbox1の次にtextbox2へってENTER押せば設定した順の勝手にカーソル
うごくでしょ。cells(1,3)=textbox1
cells(3,5)=textbox2
とか書けば指定したセルにしか入力されないでしょ?
それを、使わないで、セルc3の次にセルe3へ入力その後セルd5へ入力またセルc3へ戻る
とエンターキーを押すごとにセルの移動が行われる様にしたい(繰り返し)
わかってくれた?
14:デフォルトの名無しさん
08/03/12 17:43:05
情報小出しは以後ヌルー
15:デフォルトの名無しさん
08/03/12 17:43:28
マクロで消してないじゃん・・・
16:デフォルトの名無しさん
08/03/13 08:57:37
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case "$C$3"
Range("$E$3").Activate
Case "$E$3"
Range("$D$5").Activate
Case "$D$5"
Range("$C$3").Activate
End Select
End Sub
質問がアレすぎるけどな、こういうことか??
シートへの入力も消去もキー入力ということなら。
17:デフォルトの名無しさん
08/03/13 11:53:09
For Each myWS In Worksheets
If myWS.name =sh_name Then (シートが存在している処理)
Next myWS
でシートの存在を調べているのですが、グラフのみがあるシートが引っ掛かりません。
どう書けばよいでしょうか?
18:10
08/03/13 12:19:51
16さん ありがとう。これがしたっかです。
日本語がわるいのかぁ・・・
反省します。
19:デフォルトの名無しさん
08/03/13 18:47:58
>>17
ワークシートを調べる →Worksheets
グラフシートを調べる → Charts
ワークシート、グラフシート両方調べる → Sheets
20:デフォルトの名無しさん
08/03/14 09:21:57
関数を組みたいのですが、
文字列"1","2","3","振1","振2","振3”,"休1","休2","休3"のどれかをセルに入力したのち
それぞれを数字6500, 6600, 6700,,,, と処理していき最後は関数SUM()で合計値をだしていきたいのです
どういった関数でできるのでしょうか?
例でもあるとうれしいのですが、どなたか分かりますでしょうか?
1,1,1,1,1,0,0, ここに6500x5の合計値
2,2,2,2,2,0,0 ここに6600x5の合計値
振3,3,3,3,3,0 ここに6700x4と7000の合計値
といった具合にセルに入力されています
21:デフォルトの名無しさん
08/03/14 10:08:44
>>20
それワークシート関数(なんたらLookupとか)で実現できるけど、マクロでやりたいの?
22:デフォルトの名無しさん
08/03/14 10:18:52
>>21
マクロと関数の違いを理解していないのですが、
実現できれば問題ないです。
23:デフォルトの名無しさん
08/03/14 10:47:07
IF 1 ELSE 6500
IF 2 ELSE 6600
...
といった感じの関数を組んでいくのでしょうか?
もしくは文字列を数字に変換にする関数でもあるのでしょうか?
24:デフォルトの名無しさん
08/03/14 11:36:39
ワークシート関数でいいなら、シートのどこかに
1 6500
2 6600
3 6700
…
という表を作って、合計するセルに
=VLOOKUP(A1,$G3:$H11,2)+VLOOKUP(B1,$G3:$H11,2)+・・・
とかすればいい。
A1, B1, …はデータのセル、$G3$H11は上の表のセル範囲。
25:デフォルトの名無しさん
08/03/14 16:04:16
スレがVBAなので、VBAで解決してみよう
なお、>>24のほうが正解だと思われる。
値を入れたいエクセルを開いて、ツール→マクロ→VisualBasicEditor
(たぶん)左上あたりのプロジェクト枠のなかで、
右クリック→挿入→標準モジュール
module1ができるはずなので、 下記を貼付
Public Function MojiChange(moji As String) As Integer
Select Case moji
Case "1": MojiChange = 6500
Case "2": MojiChange = 6600
Case "3": MojiChange = 6700
Case "振1": MojiChange = 6800
Case "振2": MojiChange = 6900
Case "振3": MojiChange = 7000
Case "休1": MojiChange = 7100
Case "休2": MojiChange = 7200
Case "休3": MojiChange = 7300
Case Else: MojiChange = 0
End Select
End Function
ファイル→保存して終了を選ぶ
今度はエクセル側で、 たとえばA1に「1」を入れる。
A2に「=MojiChange(A1)」といれる。
するとA2には6500と入っている。
26:デフォルトの名無しさん
08/03/14 18:27:13
一つのセルの中に複数の値がスペース区切りで並べて書いてあるのですが
これを上手く取得する方法はないでしょうか?
27:デフォルトの名無しさん
08/03/14 19:22:52
>>26
つsplit関数
28:デフォルトの名無しさん
08/03/14 19:22:58
split
29:デフォルトの名無しさん
08/03/14 22:12:01
>>24
lookup()じゃなくて、vlookup()を使う理由は?
# 昼間lookup()版を書き込もうとしたらアクセス制限されてた(:;
30:デフォルトの名無しさん
08/03/14 23:17:45
vlookupのほうが有名だからだろ。
31:デフォルトの名無しさん
08/03/15 00:54:07
無印lookupはいらない子
32:デフォルトの名無しさん
08/03/15 01:52:35
このスレの住人なら知っていますね、あの糞開発ツールのことを
・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
糞だけど、政治的な理由で無理やり使わされているんですよね
もういい加減、我慢するのはやめませんか?
・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「糞開発ツールは話にならない」と突き放しましょう。
バグレポートなどしてはいけません。改善要求などもってのほかです。
あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
なんて話が出たら力強く机を叩き、会議室を出ましょう。
あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。
糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
33:デフォルトの名無しさん
08/03/15 01:57:49
そんなものを使っている会社を辞めないお前も不思議な人間だ。
34:デフォルトの名無しさん
08/03/15 19:21:33
VBAスレなのに、関数で答えを返す謎なスレ。
簡単に関数で解決できても、小難しくVBA自作関数で返してやるのがこのスレの醍醐味だろ?
35:デフォルトの名無しさん
08/03/15 21:17:04
誘導
Excel総合相談所 66
スレリンク(bsoft板)
36:デフォルトの名無しさん
08/03/15 23:33:54
良回答認定
37:デフォルトの名無しさん
08/03/16 12:10:16
>>33
コピペにマジレス(´∀`)カコイイ!
38:デフォルトの名無しさん
08/03/17 13:28:51
マクロの登録で、ツール、分析ツール、相関を選択しました。
マクロが作成されましたが、いざ実行してみると~.XLAファイルが見つかりませんとエラーがでます。
どうすればよいでしょうか?
39:デフォルトの名無しさん
08/03/17 15:35:24
マクロをメニューバーに追加したんですが、グラフ選択時に追加したのが消えてしまいます。
アクティブなグラフに変更を加えるマクロだったので正直使えません、グラフ選択時に消えなくする方法を教えて下さいm(__)m
長文失礼しました
40:デフォルトの名無しさん
08/03/17 21:36:12
Excel向けの月例パッチにバグ、マクロ実行時の計算に誤り
URLリンク(www.computerworld.jp)
この記事の内容が理解できないのだが
誰かわかりやすく説明してください。゜(ノД`)゜。
41:デフォルトの名無しさん
08/03/17 21:38:39
【ヲタの一日】
彡川三三三ミ 9:00 起床
川出 ::::::⌒ ⌒ヽ 9:05~9:20 朝食(昨日の残り物)
出川::::::::ー◎-◎-) 9:25~12:25 溜まっていたギャルゲーを消化
..川(6|:::::::: ( 。。)) 12:30~13:00 昼食(レトルトカレー)
出川;;;::∴ ノ 3 ノ 13:05~16:00 ゲーハー板で妊娠を煽る
ノ\_;;;;;;;;;;;;;;;;ノ 16:01~17:00 半角二次元板でエロ同人誌を漁る
( * ヽー--'ヽ ) 17:05~17:55 ゲームをやる
(∵ ;) ゚ ノヽ ゚ ):) . 18:00~19:28 アニメを見る
(: ・ )--―'⌒ー--`,_) 19:30~19:58 飯を食いながらアニメを見る
(___)ーニ三三ニ-) .20:00~24:00 ゲーム(FF11)
(∴ ー' ̄⌒ヽωニつ 1:02~3:12 ゲーム(エロゲー)
`l ・ . /メ / . 3:14~3:26 エロ同人誌でオナニー
ヽ ∵ /~- /. 3:27~ 就寝
(__)))))_))))) ※風呂に入るのは一週間に一度だけ
42:デフォルトの名無しさん
08/03/17 21:39:44
MS08-014によって生じる問題とは、Excelで特定のタイプのマクロが実行されたときに、
Excelが正しい数値ではなくゼロを返すというもの。Excel 2003において、株価や在庫量
などのデータを外部ソースからリアルタイムで取得し、それらをExcelの配列にプラグイン
しているケースで発生する。
43:デフォルトの名無しさん
08/03/17 21:43:48
--
After you install security update MS08-014 on a computer that has Microsoft Office Excel 2003 installed,
array-entered functions that contain a Visual Basic for Applications (VBA) macro that refers to a Real Time Data source return an incorrect value.
The incorrect value is usually 0.
--
どこを説明しろと?
44:デフォルトの名無しさん
08/03/17 21:47:59
>>42
>>データを外部ソースからリアルタイムで取得し、それらをExcelの配列にプラグインしているケース
これってRTD関数を使ってる場合ってこと?
そんでVBA上で配列に格納すると発生するってこと??
45:デフォルトの名無しさん
08/03/17 23:34:29
Offset関数について教えてください。(Xp、オフィス2003)
RANGE("A1").Offset(3,0)としたとき、ターゲットはセルA4をさします。
ただ、A2とA3を結合していた場合、ターゲットはA5になります。
Offset関数は結合を無視することって出来ないんですか?
上の例で言えば、間に結合があろうがなかろうがA1を基準として
下に3セル分移動したA4を指定したいんですが・・・
相対指定はOffsetくらいですよね?
46:デフォルトの名無しさん
08/03/17 23:48:35
>>45
i =1
i = i + 3
RANGE("A" & i)
じゃあだめなのか?
セル値の固定はシートに任せると思ったとおり動かないことがあるので、
モジュール側で指定するようにしてる。
26進数変換モジュールを用意しておくと使い勝手もよくなる。
47:デフォルトの名無しさん
08/03/18 00:12:56
...
48:デフォルトの名無しさん
08/03/18 00:29:57
右行って下行って左行けばぁ?
49:デフォルトの名無しさん
08/03/18 08:24:08
つまり、結合したりしてるシートにOffset関数は使い物にならないということで?
50:デフォルトの名無しさん
08/03/18 09:42:40
Office 2000だと、range("A1").offset(3,0)はA4になるな。
仕様が変更されたのかな。
51:デフォルトの名無しさん
08/03/18 12:22:18
Replaceを使って置換するべき文字列を、変数定義した内容で置換する事は出来ますか?
52:デフォルトの名無しさん
08/03/18 13:14:08
>>51
もっと具体的に
53:デフォルトの名無しさん
08/03/18 18:22:10
>>52
あるExcelのシートの文字列の一部を置換したいとします。その文字列を入力のボックス作成、そこを手入力し、置換出来る様にしたいのです。
例えば"犬"を"猫"としたり、"犬"を"馬"と置換出来る様に組みたいです。
携帯なのでソースは別途見せます。
54:デフォルトの名無しさん
08/03/18 22:11:13
なんかいきなりVBAと謳われる神の言語を使用して
ツールを期限付き(超最短)で作るハメになったんだけど
これって1日半ぐらいあればマスターできますよね?
55:デフォルトの名無しさん
08/03/18 22:13:39
できます
56:デフォルトの名無しさん
08/03/18 22:15:30
>55
ありがとうございます!!
57:デフォルトの名無しさん
08/03/18 23:52:20
VBA初めて半年ぐらいの初心者です
セルに挿入されたコメント(セルの右上に赤い三角のでるやつ)
にかいてある文章を取得することってできるのでしょうか?
自分で色々ヘルプを見てみたところVBAでコメントの文章の設定はできるようなのですが、
取得する方法が分かりません。
具体的に言うと、ある人が仕事に使う表(約40シート、各シートに20×5セルぐらい)を
エクセルに打ち込んだんですが、表の中に何箇所か、セルに値を入れるところを
コメントに入れてしまったんです。
セル内におさまらなかったし、コメントだとカーソルをもっていくと長い文章も表示されて
見やすいからだそうですが、その仕事を引きついた自分はやりにくくてしょうがいないので
コメントの設定されているセルの値にそのままコメントの文章を入れたいのです。
手作業でやると結構時間がかかりそうな量なのです。
マクロの記録で「コメントの編集→コメント文章のコピー→セルに貼り付け」
をやってみたのですが、コメント文章のコピーの部分が記録されていませんでした
分かる方いたらお願いします。
58:デフォルトの名無しさん
08/03/19 00:12:02
range1.comment.text
59:デフォルトの名無しさん
08/03/19 00:23:43
Sub macro()
If Cells(1, 1).NoteText <> "" Then
Cells(1, 1) = Cells(1, 1).NoteText
End If
End Sub
60:デフォルトの名無しさん
08/03/19 00:32:21
さっそくの回答ありがとうございます
>>59さんのnotetextで取得できました・・・
これも試したはずなんですが、今やったら動いたので
なんか別の原因でエラー出てたみたいです
助かりました
>>58
せっかく回答いただいて申し訳ないのですが、うちの環境だと
comment.textはやっぱりエラーになりました
「オブジェクトまたはwithブロックが定義されていません」
とのことです
これも別の原因があるのかな?
ともかくありがとうございます
61:デフォルトの名無しさん
08/03/19 08:47:17
ComboBox1のリストを開いたままCommandButton1をクリックする度に
8行づつ表示したいのですが、難しくて作れません。
誰か助けてちょ。
Dim a As Long
On Error Resume Next
a = 1
If CommandButton14.Click Then
ComboBox1.ListIndex = a
a = a + 1
End If
CommandButton14.Click まずここだめー
そして
ComboBox1のリストが閉じちゃう。
ハイ、ダメェ~
エンタの見すぎですいません
62:デフォルトの名無しさん
08/03/19 11:58:32
答える気にならんな
63:デフォルトの名無しさん
08/03/19 12:43:54
そこを何とか・・・
64:デフォルトの名無しさん
08/03/19 13:18:02
コンボボックスって、フォーカスを失っても開きっぱなしにすることできるのか?
65:デフォルトの名無しさん
08/03/19 13:25:53
エンタの神様って死ぬほどつまらん
それを真似されちゃぁねぇ
>>64
無理じゃないか・
66:デフォルトの名無しさん
08/03/19 13:54:00
ComboBox1.SetFocus も ComboBox1.Valueでも開かないな
67:デフォルトの名無しさん
08/03/19 14:07:00
ACCESSのフォームとVBAなら
DoCmd.GoToControl "コンボボックス名"
SendKeys "%{down}" , true
で開くけれどな
68:デフォルトの名無しさん
08/03/19 15:46:57
セルをセレクトせずに、仮想セレクトによって、オフセットを使うことは
可能でしょうか。
69:デフォルトの名無しさん
08/03/19 15:59:58
仮想セレクトって何?
70:デフォルトの名無しさん
08/03/19 17:13:30
>>69
Sub ppp()
Dim i As Byte
Dim hoge() As Byte
For i = 1 To 5
ReDim Preserve hoge(i)
Range("A" & i).Select: hoge(i) = Selection.Value
ActiveCell.Offset(0, 1).Value = "済"
Next i
End Sub
offsetを使いたい場合、上みたいにいちいちセレクト
しなくてはいかんのでしょうか・・ということなのですが。
hoge(i) = Range("A" & i).Valueで値をとって、そこから、
オフセットでセル移動をすることは出来ないですか?
71:デフォルトの名無しさん
08/03/19 17:36:36
基本的に、selectは必要ないと思っておいて、さほど間違いではない。
(1)
hoge(i) = Range("A" & i).value
Range("A" & i).Offset(0, 1).Value = "済"
(1')
with range("A" & i)
hoge(i) = .value
.offset(0, 1).value = "済"
end with
(2)
hoge(i) = Range("A" & i).value
Range("A" & i + 1).Value = "済"
72:デフォルトの名無しさん
08/03/19 17:54:41
>>71
あ、そういうことが出来るんですか。
ありがとうございます。早速試します。
73:デフォルトの名無しさん
08/03/19 21:00:41
必要ないというか、値を取得するだけなのに、そのためにセルのSelectやActivateをする
ってのはダメプログラムの良い証拠
74:デフォルトの名無しさん
08/03/20 01:22:17
質問です、行番号を変数redord_lineに取得する
スタート列変数 start
ゴール列変数 end
上記の3つの変数を使って指定したレコード範囲だけ色を変更することは
できるのでしょうか?色は何色でもいいです。
75:デフォルトの名無しさん
08/03/20 01:38:28
できます
76:デフォルトの名無しさん
08/03/20 02:22:59
Range(Cells(Row1,Col1),Cells(Row2,Col2))..Interior.Color = COLORREF
77:デフォルトの名無しさん
08/03/20 11:33:41
すいません、関数の引数にString型の配列を渡しているのですが
型が一致しませんとでてしまします。原因がわからないので教えてください。
Dim hogehoge(999) As String
'関数呼び出し
method(hogehoge)
---------------------------------------------
'関数実体
Function method(hogehoge() As String)
78:デフォルトの名無しさん
08/03/20 12:06:11
あれ?ここって全然ひといない?
79:デフォルトの名無しさん
08/03/20 12:16:15
質問はあげで
80:デフォルトの名無しさん
08/03/20 12:39:16
Function test()
Dim hogehoge(999) As String
'関数呼び出し
Call method(hogehoge)
End Function
Function method(hogehoge() As String)
'関数実体
MsgBox UBound(hogehoge())
'
End Function
81:77
08/03/20 13:20:50
>80
あざーす。
エラーは回避できたんだけどなぜCallをつけると
エラーがでなくなったのかという根本的な原因がよくわからなかったんでありますが
なぜかわかります?データ型の不一致っていうと根本的に
構文の使い方そのものが間違ってるイメージがあるんですが・・
Callステートメントについて少し調べたんだけど
このステートメントの役割は関数の呼び出しを明示的に宣言しているのと
参照渡しと値渡しの使い分けをこっちでしなくて済むってことらしいんですが
82:デフォルトの名無しさん
08/03/20 13:23:59
Dim hogehoge(999) As String
'関数呼び出し
method(hogehoge)
---------------------------------------------
'関数実体
sub method(hogehoge() As String)
83:デフォルトの名無しさん
08/03/20 17:19:36
トリビア
明示的という日本語は存在しない
84:デフォルトの名無しさん
08/03/20 17:33:50
そんなしょうもねぇ揚げ足とるくらいなら糞して寝てろや・・・
85:デフォルトの名無しさん
08/03/20 17:48:37
普通に戻り値だと
strTEXT = method(hogehoge)
実行したいだけだと
call method(hogehoge)
と使ってきたので、なぜと言われても困るなぁ…
86:デフォルトの名無しさん
08/03/20 18:13:15
要は戻り値がないメソッドを呼ぶときは
明示的にCallステートメントをメソッド名の前に付けなくてはならないという
暗黙の了解がVBAにはあるわけだ。あざーす
87:デフォルトの名無しさん
08/03/20 18:15:06
>>83
あるよ
88:デフォルトの名無しさん
08/03/20 18:35:11
言葉は生きてて、時代などを反映して生まれては消える。
広辞苑か何かに追加されてないといけないのか?
89:デフォルトの名無しさん
08/03/20 18:38:11
>>86
VBAは初めて?
普段は何で書いてるの?
90:デフォルトの名無しさん
08/03/20 18:48:11
>89
ヒミツのアッコちゃん
91:デフォルトの名無しさん
08/03/20 18:57:23
ネタだと思ったが
ヒミツのアッコちゃん
っつー言語は本当にあるんだな
織田信長の乗りだな
92:デフォルトの名無しさん
08/03/20 21:32:16
>>76さん
できました、ありがとうございます。
93:デフォルトの名無しさん
08/03/20 22:01:16
method(hogehoge)だとhogehogeに()をつけてからmethodに渡すと解釈するからじゃなくて?
もしそうなら、methodと括弧の間に空白が置かれていると思うし、method hogehogeで呼べるはずってことだけど。
94:デフォルトの名無しさん
08/03/20 23:02:30
日本語でおk
95:デフォルトの名無しさん
08/03/20 23:17:53
日本語だとVBAが走りません
96:デフォルトの名無しさん
08/03/21 02:21:41
メソッド(ほげほげ)
97:デフォルトの名無しさん
08/03/21 05:40:24
漏れは括弧を付けて呼びたいのに
勝手に括弧を消されるのが気に入らない
98:デフォルトの名無しさん
08/03/21 06:04:35
かっこわるい
99:デフォルトの名無しさん
08/03/21 08:32:13 BE:168148962-2BP(380)
valueやformulaはコピ~されるのですが Numberformat がコピ~されません
なにが悪いのでしょう?
With oThisSheet
.Rows(p_row + cnt).Value = .Rows(p_eval_row + 1).Value
.Rows(p_row + cnt).FormulaR1C1 = .Rows(p_eval_row + 1).FormulaR1C1
.Rows(p_row + cnt).NumberFormat = .Rows(p_eval_row + 1).NumberFormat
.Rows(p_row + cnt).FormulaR1C1Local = .Rows(p_eval_row + 1).FormulaR1C1Local
.Rows(p_row + cnt).NumberFormatLocal = .Rows(p_eval_row + 1).NumberFormatLocal
End With
100:デフォルトの名無しさん
08/03/21 12:11:13
dim name as string
name=range("a1")
if name=textbox1 then
msgbox("有")
end if
このtextbox1の入力 大文字 小文字でも 認識させたいのですが
どう処理したらいいのでしょか?
例えば range("a1")のデータが a0001 textbox1の入力がA0001
この場合もmsgbox(”有”)と拾ってもらいたいのですが・・・
101:デフォルトの名無しさん
08/03/21 12:14:06
>>100
なんとなく違う回避方法もある気がするが、
StrConv
で、小文字に統一してから比較する
102:デフォルトの名無しさん
08/03/21 12:37:55
StrConv の使い方は フォ-マットですか?
それとも、dim name as StrConv と書くのでしょか?
103:デフォルトの名無しさん
08/03/21 12:47:16
ヘルプ読め
104:デフォルトの名無しさん
08/03/21 13:17:57
>>100
if name=textbox1 then
→If StrComp(name, textbox1, vbTextCompare) = 0 then
ところで、msgboxの()は必要なの?
105:デフォルトの名無しさん
08/03/21 13:18:39
msgbox("変数同士は大文字小文字関係なく比較するのだが、" & vbnewline & _
"textboxは厳密に判定するのか?")
' 実際にtextboxを配置してみての実験はしていない
106:デフォルトの名無しさん
08/03/21 13:20:41
if lcase(name) = lcase(textbox1.text) then
でいいんじゃあるまいか。
107:デフォルトの名無しさん
08/03/21 14:56:57
100です。皆様ありがと御座います。
本当はmsgbox()のところは、分かりやすく質問させてもらうため
簡単に仮に置いただけです。
本当は FOR EACH と組み合わせて、膨大な数あるデーターの中から
対象データを抜き出したいのです。
今のコードは下記の様に書いてるのですが、
Dim name As String
name = textbox1.text
Dim 範囲, 名前
Set 範囲 = Range("a1:z10000")
For Each 名前 In 範囲
If 名前.Value = name Then
名前.Select
end if
全てがそろってないと拾ってくれず、半分手作業状態で困ってました。
一応、上記コードでやって見ましたが、for each とうまくかみ合いません
再び、ご教授お願いします。
108:デフォルトの名無しさん
08/03/21 15:28:00
最初からやりたいことを書きましょう。
dim 範囲 as range, 名前 as range
set 範囲 = range("a1:z10000")
set 名前 = 範囲.find(textbox1.text, lookat:=xlwhole)
if not 名前 is nothing then
名前.select
end if
109:デフォルトの名無しさん
08/03/21 15:57:09
大文字と小文字全て一致してないと、拾ってくれません。
もうちょっと、いじくってみます。
110:デフォルトの名無しさん
08/03/21 16:33:11
原因が分かりました。
半角の小文字aと全角の小文字aの違いが有ると拾わないみたいです。
111:デフォルトの名無しさん
08/03/21 17:18:17
>>110
StrConv
112:デフォルトの名無しさん
08/03/21 17:23:52
永久ループ
113:デフォルトの名無しさん
08/03/21 18:07:08
トリビア
明示はサ変名詞なので的が付く対象ではない
したがって明示的というのは日本語風の言語使用方法に過ぎない
114:デフォルトの名無しさん
08/03/21 21:14:50
>>113
なぜサ変名詞に的がついてはいけないの?
115:デフォルトの名無しさん
08/03/21 23:06:23
VBAでオラクルのテーブル読めますか?
116:デフォルトの名無しさん
08/03/21 23:57:02
よんだことあるけどしるか!ってかんじ
117:デフォルトの名無しさん
08/03/22 00:37:29
>>115
excelからやると結構面倒
その辺になるとACCESSのほうがいいかも。
ODBC経由でオラクルのテーブルをリンクできるようにしてから、openrecordsetすれば簡単
118:デフォルトの名無しさん
08/03/22 00:43:43
oo4oってもうないんだっけか
119:デフォルトの名無しさん
08/03/22 12:49:32
Oracleに接続するぐらい別に面倒じゃない
VBSからでも使える程度のよくあるケース
120:デフォルトの名無しさん
08/03/22 13:54:20
VBAってさぁ、ソース丸見えなんだけどさ見えなくできないの?
121:デフォルトの名無しさん
08/03/22 14:51:54
パスワードをかければ、カジュアルなプロテクトはできる。
ただし、はずし方もググればすぐにわかるんだけどね・・・
122:デフォルトの名無しさん
08/03/22 15:59:13
当方環境
【OS】WinXP Home
【バージョン】Excel2002
質問させて頂きます。
数あるレコードの中から番号を選択して、内容を反映させたデータ閲覧用フォーム2を表示させています。
画面で見るだけではなくそれを印刷に流用できればと考えましたので、用紙サイズをA4・印刷方向を横に設定する以下の記述を追加しました。
Private Sub CommandButton3_Click()
UserForm2.PrintForm
Printer.Orientation = vbPRORLandscape
Printer.PaperSize = vbPRPSA4
End Sub
実行すると印刷はされるものの、A4縦で印刷されてしまいました。
A4横に設定するには、どのように記述すればよろしいのでしょうか?
ご存知の方いらっしゃいましたら、宜しくご教示お願いします。
123:デフォルトの名無しさん
08/03/22 20:48:45
ググッたらこんな使い方してたみたいだけど?
Forms("フォーム名").Printer.Orientation = acPRORLandscape
それかプリンターの設定で縦になってるから云々とか
124:デフォルトの名無しさん
08/03/23 01:50:42
1ヶ月の超初心者です、教えて下さい。
条件分岐でそれぞれの製品(4製品)が5000以上になったらOKになるようにしたいのですが
どう書けばいいのでしょうか?それぞれの時の書き方が分かりません。D4:F7 は範囲です。
宜しくお願いします。
If Range("d4:f7").Value >= 5000 Then
msgbox"ok"
Selection.Value = "ok"
Else
Selection.Value = "no"
125:デフォルトの名無しさん
08/03/23 02:23:53
質問の内容がよくわからない。4製品?何に対しての?
5000以上っていうのはD4:F7全ての合計なのか
1個1個のセルの値が5000以上なのかなど
126:デフォルトの名無しさん
08/03/23 02:53:39
4製品というのは例えばストーブ、掃除機、時計、テレビで
1個1個のセルの値が5000以上になるものです。合計は全く関係ありません。
4製品の全ての値が5000(円)以上になっているものに対してOKになるようにしたいのですが。
説明が下手ですみません。
127:デフォルトの名無しさん
08/03/23 03:05:48
D4:F7って9セルあるけど?4製品?
128:デフォルトの名無しさん
08/03/23 03:15:07
9セルじゃなくて12セルか
129:デフォルトの名無しさん
08/03/23 03:16:31
すみません。金額の範囲はC4:F7でした。16セルです。
130:デフォルトの名無しさん
08/03/23 03:53:41
これでおk?
'対象のワークシートを変数wkに格納
Set wk = Worksheets("Sheet1")
'対象のワークシートの範囲の開始("C4")から終了("F7")までを変数currentCellにセットしてループ
For Each currentCell In wk.Range("C4:F7")
'対象のセルの値が5000以上だった場合
If currentCell.Value >= 5000 Then
currentCell.Value = "ok"
End If
Next currentCell
131:デフォルトの名無しさん
08/03/23 04:11:38
ご親切にどうもありがとうございました。
132:デフォルトの名無しさん
08/03/24 15:54:55
ちょっとスレ違いかもしれませんが、教えてください。
以下のようにマクロを使わず、セルに入ってるデータをセルの位置として
指定して計算させたいのですが可能でしょうか?
SUM(A1のデータ:A2のデータ)
例えば、以下のようにデータが入力されているとき、
A1のセルに"B1"
A2のセルに"B10"
マクロを使わずSUM(B1:B10)が行われるようにするにはどうすればよいでしょうか?
133:デフォルトの名無しさん
08/03/24 16:14:10
indirect()
134:デフォルトの名無しさん
08/03/24 16:20:33
>>133
おー!ありがとうございます!!
135:デフォルトの名無しさん
08/03/25 23:10:05
Excelを他のプログラムからCreateObjectして操作するときに、
そのEcelのオブジェクトのApplicationからメッセージボックスを
表示するようなことはできますか?Excelにマクロを定義しといて
呼び出すという方法じゃなくて、直接メッセージを表示するような
ことがやりたいです。
136:デフォルトの名無しさん
08/03/26 01:20:08
できる
137:デフォルトの名無しさん
08/03/26 01:29:29
そのためにわざわざExcel使うか?
138:デフォルトの名無しさん
08/03/26 21:19:57
質問です。
VBAの処理のみでAccessに依存することなく、Accessのデータテーブルから
エクセルのシートにデータ内容をExportしたり、エクセルのシートの内容をデータベースに
Importすることはできるのでしょうか?
139:デフォルトの名無しさん
08/03/26 23:03:13
>Accessに依存することなく、Accessのデータテーブルから
???
140:デフォルトの名無しさん
08/03/26 23:20:00
>>136
どのオブジェクトの何というメソッドを使うのか教えていただけないでしょうか。
141:デフォルトの名無しさん
08/03/26 23:59:32
138です。
Accessを使ってシートにデータをExportをしますが、Accessは使わずにVBAの
機能のみでシートにデータを取り込みたいです。
142:デフォルトの名無しさん
08/03/27 00:16:40
excelのvbaだけでは無理
143:デフォルトの名無しさん
08/03/27 00:39:27
質問です。
WindowsXP Excel2000を使っています。
Excel VBAで、画像ファイル(.jpgとか.tifとか)をビューアなどで開かず、
直接印刷する方法を教えてください。
単純に印刷するだけならシェルを使って何とかなったのですが、
用紙サイズや向きの指定をしたく、その方法がまったくわかりません。
よろしくおねがいします
144:デフォルトの名無しさん
08/03/27 07:01:01
>>138 >>141
ADOとかDAOを使えばそんな感じの事はできる
インポート/エクスポートとはちょっと違うけど
145:デフォルトの名無しさん
08/03/27 11:30:02
セルをマウスでセレクトして外側は太い罫線、中は細い罫線をひくというような
共通で使えるVBAを作ったのでエクセルを開くたびに常にそのVBAを読み込みたいです。
現在は***.vbaファイルを保存しておき、そこからxlaファイルにしてそれをアドオンでエクセル起動時に読ませています。
これだとVBAを修正するときは、
新規でエクセルを立ち上げ
↓
VBEで***.vbaを読み込み
↓
編集後別名のxlaファイルに保存(同一ファイルはエクセル起動時に開かれるのでさわれない為)
↓
エクセルを閉じ、作ったxlaファイルを設定しているxlaファイルに置き換え
と面倒な事になっています。※xlaファイルはダイレクトに編集できないようだ
みなさんは作ったVBAをどのように管理していますか?
146:デフォルトの名無しさん
08/03/27 13:17:35
つ個人用マクロブック
147:デフォルトの名無しさん
08/03/27 18:33:14
QueryTables.Add()メソッドで
Connection情報を指定する際に
Jet OLEDB:Engine Type=?
?に対してはどんな値を指定するのが妥当なんでしょうか?
ちなみに↓を見てたのですが全く意味がわかんなかったんです。。
URLリンク(www.microsoft.com)
148:147
08/03/27 20:55:55
ちなみに
OLE DBプロバイダを使用して
あるExcelファイルのシートのデータを
新規シートへコピーするのをやろうとしてます。
149:デフォルトの名無しさん
08/03/27 21:06:00
>>144さん
ADOを調べて
public sub toridasi()
Dim cnn as NEW ADODB.Connection
Dim rs As NEW ADODB.Recordset
set cnn = NEW ADODB.Connnection
cnn.Connection String = _
略
略
cnn.Open
set rs.Open Source = 略
といった感じでやったらできました。
質問なのですが今度はデータベースから取り込むのではなく、
Excelのシートの内容をデータベースに書き込むにはどうしたらいいですか?
150:デフォルトの名無しさん
08/03/27 22:34:35
>>149
まあこの辺見るとかググるとかして頑張ってください
URLリンク(www.asahi-net.or.jp)
151:デフォルトの名無しさん
08/03/27 23:00:59
指定フォルダ内の複数ファイルに対して
文字列の置換処理をしたいのですが
どのように書けばいいのでしょうか?
152:デフォルトの名無しさん
08/03/27 23:07:35
ファイル開く→置換
153:デフォルトの名無しさん
08/03/27 23:11:07
>>150さん
このサイトは見たことがありますが参考になりませんでした。
154:デフォルトの名無しさん
08/03/28 00:43:16
>>153
そこに書いてあることが理解できない段階なら、
まじめにVBAの本を買って、勉強したほうがいいんじゃないかなと思う。
155:デフォルトの名無しさん
08/03/28 02:24:22
>>153
DAOで、試験的にやってみました。
あらかじめ、TEST.mdbの中に「受注」テーブルがある場合です。
ワークシート「受注」の4行目から9行目までを新規レコードに追加します。
Sub Data_Export()
Dim WS As Worksheet, r As Long
Dim db As Database, rs As DAO.Recordset
Set WS = Worksheets("受注")
Set db = OpenDatabase(ThisWorkbook.Path & "\TEST.mdb")
Set rs = db.OpenRecordset(Name:="受注", Type:=dbOpenDynaset)
For r = 4 To 9
With rs
.AddNew
.Fields("日付").Value = WS.Cells(r, 2).Value
.Fields("顧客名").Value = WS.Cells(r, 3).Value
.Fields("注文番号").Value = WS.Cells(r, 4).Value
.Fields("品名").Value = WS.Cells(r, 5).Value
.Fields("単価").Value = WS.Cells(r, 6).Value
.Fields("数量").Value = WS.Cells(r, 7).Value
.Update
End With
Next r
db.Close
End Sub
参考になればよいですが。
156:155
08/03/28 04:48:08
ちょっと修正
Next r の次から
---------------------------
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub
---------------------------
157:145
08/03/28 10:03:57
>>146
ありがとうございます。
個人用マクロ調べてみました。
これだと下記にファイルを置かれてしまうようなのですが、
管理するマクロファイルは任意の場所に置いて管理したいです。
C:\Program Files\Microsoft Office\Office\XLStart
何か方法はありますでしょうか。
158:デフォルトの名無しさん
08/03/28 18:33:56
>>157
俺は
ツールバーにマクロのコマンド作る
159:135
08/03/28 23:15:33
135なのですが・・・結局できないわけですか・・・。
160:デフォルトの名無しさん
08/03/29 00:13:38
余裕でできる
161:デフォルトの名無しさん
08/03/29 00:25:20
>>135
何で困ってるのかさっぱりわからん。
162:デフォルトの名無しさん
08/03/29 01:48:52
application.assistant.doalert
or 余裕
application.executeexcel4macro "alert(...)"
or さらに余裕
application.executeexcel4macro "call(""user32"",""messagebox"",..."
or さらにさらに余裕
...
163:デフォルトの名無しさん
08/03/29 12:35:12
>>135
もっと何をしたいのか具体例を挙げてくれないと
出来るとしか答えられん。
164:デフォルトの名無しさん
08/03/29 15:01:22
>>163 < >>162
165:デフォルトの名無しさん
08/03/29 15:23:42
>>161 >>163
>>140
まあ一応>>162で答え出てんじゃね
166:デフォルトの名無しさん
08/03/30 19:16:39
OS WindowsXP
Excel 97
で、
a1.a2.a3.….an を
an,a1.….a(n-1) と並べ替えるにはどうしたらいいんでしょうか。
a1~anは英数字、カタカナ、漢字です。
よろしくお願いします
167:デフォルトの名無しさん
08/03/30 20:05:33
>>166
an
168:デフォルトの名無しさん
08/03/30 20:06:16
みすったorz
anをa1のセルに移動(insert)するだけでいいんじゃないのか?
ってかXPでなんで97なんだ?
169:デフォルトの名無しさん
08/03/30 20:06:21
エスパーさん、出番ですよ
170:デフォルトの名無しさん
08/03/30 20:12:14
vbaじゃなくて並び替えですることだろ
171:デフォルトの名無しさん
08/03/30 20:24:37
手早いレスありがとうございます。
>>168
一つのセルの中に「.」で区切られた状態で入っているので・・
97なのはwin95のPCで読めるようにしてたのかと。。
>>170
どのようにすればいいんでしょうか
172:デフォルトの名無しさん
08/03/30 20:26:48
>>171
それは本当にVBAでやらなきゃならんことなのか?
後ろから「,」を検索してその位置以降の文字列を前に持ってくるだけだろ?
Excelの関数で事足りると思うのだが?
173:デフォルトの名無しさん
08/03/30 20:29:22
>>172
並び替え以前は全て「.」で区切られているので・・
またデータが大量にあるためマクロで処理したいです。
174:デフォルトの名無しさん
08/03/30 23:35:03
>>173
1.関数で別シートに写像
2.シート全体を選択してコピー→値の貼り付け
175:デフォルトの名無しさん
08/03/30 23:36:48
>>166
あ.い.う.え.お
と並んでいるものを、
お.あ.い.う.え
と並べたいのか?
お.え.う.い.あ
と並べたいと言う意図だとan,a1.….a(n-1) はおかしいし・・・
意味が分からん。
176:デフォルトの名無しさん
08/03/30 23:44:36
たくさんのcell内のデータを並びかえるのだから
自前でsort関数つくるのがいいだろ
177:デフォルトの名無しさん
08/03/30 23:46:51
>>175
俺も意味が判らんかったが、そういう意味で解釈すると、こうかな?
Function test()
Dim LastStr As String
Dim maxy As Long
maxy = 5
LastStr = Range("A" & maxy)
For i = maxy To 2 Step -1
Range("A" & i) = Range("A" & i - 1)
Next
Range("A1") = LastStr
End Function
178:デフォルトの名無しさん
08/03/30 23:48:43
>>177
並べ替えたいものは「1つのフィールドに入っている」んじゃないか?
179:デフォルトの名無しさん
08/03/31 00:01:58
>>178
そういう意味?
ならこれでどうだ?
Function test()
Dim baseText As String
Dim KekkaText As String
Dim varStr() As Variant
Dim i1 As Long, i2 As Long
Dim maxy As Long
'
baseText = "あいうえお.aiueo.アイウエオ.アイうえオ.aiウエお"
i2 = 0
'
ReDim Preserve varStr(i2) As Variant
For i1 = 1 To Len(baseText)
If Mid(baseText, i1, 1) = "." Then
i2 = i2 + 1
ReDim Preserve varStr(i2) As Variant
Else
varStr(i2) = varStr(i2) & Mid(baseText, i1, 1)
End If
Next
'
KekkaText = varStr(UBound(varStr))
For i1 = 0 To (UBound(varStr) - 1)
KekkaText = KekkaText & "." & varStr(i1)
Next
'
MsgBox (KekkaText)
End Function
180:デフォルトの名無しさん
08/03/31 00:21:21
いいんじゃね?
あとは自作関数化すれば何セルあっても動作するするだろ
それくらいは自分でなんとかすればよし、というところか。
181:166
08/03/31 00:39:56
>>174
どうもです
>>175
あ.い.う.え.お
と並んでいるものを、
お,あ.い.う.え
です。 「お」の後がコンマになってます。
>>177-180
ありがとうございます。
おきてからやってみます
182:179
08/03/31 00:48:02
>>181
おの後ろはカンマにしたかったのか。
それは実装できてないわ。
まぁ、ドットで区切って、並び替えて、再結合は実現しているので、
あとは別に苦労しないだろ。
183:デフォルトの名無しさん
08/03/31 01:54:26
Sub foo(r As Range)
Dim cell As Range
Dim pos As Long
Dim buf1 As String, buf2 As String
For Each cell In r
pos = InStrRev(cell.Value, ".")
If pos > 0 Then
buf1 = Right$(cell.Value, Len(cell.Value) - pos)
buf2 = Left$(cell.Value, Len(cell.Value) - Len(buf1) - 1)
cell.Value = buf1 & "," & buf2
End If
Next
End Sub
Sub bar()
foo Range("A1:A10")
End Sub
184:デフォルトの名無しさん
08/03/31 02:09:14
行頭から半角5文字目の空白を;に変えたい
185:デフォルトの名無しさん
08/03/31 08:11:53
>>183
>>166 [Excel97]
×InStrRev
186:デフォルトの名無しさん
08/03/31 10:21:31
>>179
なんだその吐き気がするコードは。
Excel97にはSplitすらないのか?
仮に無いとしても、>>172で十分だろ。
187:デフォルトの名無しさん
08/03/31 10:23:08
いちいち"."で分割して結合する意味がわからん
188:デフォルトの名無しさん
08/03/31 11:14:25
>>186
97にはsplitもなければInstrRevもない。
189:デフォルトの名無しさん
08/03/31 11:22:56
Replaceもなかったりする
190:デフォルトの名無しさん
08/03/31 11:24:40
>>188
>>187
191:デフォルトの名無しさん
08/03/31 11:27:35
意味なんてものはその職場の風習によるだろ。
192:デフォルトの名無しさん
08/03/31 11:29:51
>>191
意味わからん
193:デフォルトの名無しさん
08/03/31 11:32:30
あー、糞コードを量産する職場だったら、>>179を見ても違和感がないという意味か
194:デフォルトの名無しさん
08/03/31 11:38:41
instrくらいあるだろ
195:デフォルトの名無しさん
08/03/31 11:42:39
>>166で意味がわからんって、どんだけ読解力無いんだよ・・・
196:デフォルトの名無しさん
08/03/31 11:47:25
>>172
>>34
197:166
08/03/31 20:28:10
>>182
上手くいきました。 ありがとうございます。
>>他住人の方
ありがとうございました。
198:デフォルトの名無しさん
08/03/31 21:12:14
まあ確かに>>179のコードはアレだが、問題が解決する側にとっちゃどーでもいい話ではあるな
199:デフォルトの名無しさん
08/03/31 22:24:02
見苦し
200:デフォルトの名無しさん
08/04/01 05:44:27
>>182
なんでこいつこんなにえらそーなんだ
201:デフォルトの名無しさん
08/04/01 08:34:03
VBA使いは総じてえらそう
202:デフォルトの名無しさん
08/04/01 09:16:55
>>1-201
質問者以外全部えらそーに見える俺は文盲
203:デフォルトの名無しさん
08/04/01 09:51:32
excel97って、left$もright$も無いの?
204:デフォルトの名無しさん
08/04/01 21:47:10
public Sub AAA()
Dim cnn as New ADODB.connection
Dim RS as New ADODB Recoreset
Dim value As Boolean
cnn.connection String = _
"Provaider = micosoft.Jet.DLEDB.4.0;" & _
"Data Source = D:\データ.mdb:"
'**************ダイアログボックス表示
value = Application.Dialogs(xlDialogSaveAs).Show
If value = False Then
Exit Sub
End If
**************
205:デフォルトの名無しさん
08/04/01 21:57:04
続き
cnn.Open
Set RS = New ADODB.Recordset
RS.Open Source := "テーブルデータ" ,ActiveConnection:=cnn, _
Corsor Type := adOpenstatic, Option := adCmdTable
ThisWorkbook.Sheets(1).range("A1").CopyFromRecordset RS
RS.Close
Set.Close
cnn.Close
Set cnn = Nothing
End Sub
質問なのですが、上記を実行するとダイアログボックスが表示されて新規でファイルを
作成して今現在動かしているエクセルブックの名前を変更して保存しているだけになってしまいます。
結局元のブック(マクロ)をコピーしているのと同じです。
私のやりたいことはダイアログボックスを表示させて、新規でブックだけ作成してデータベースのデータ.mdbのテーブルだけを
新規ブックシートに書き込みたいです。どうすればいいでしょか?
206:デフォルトの名無しさん
08/04/02 03:55:51
>>205 サンプルを作ってみました。
'---------Sample-----------
Sub Data_Import()
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
Dim ShinkiFullName As String, ShinkiFile As String
Dim wb As Workbook, ws As Worksheet, c As Integer
Workbooks.Add ' ブックを新規作成
ShinkiFile = ActiveWorkbook.Name '新規ブックの名前を格納①
'エクセルと同じフォルダにある「TEST.mdb」に接続
cn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\TEST.mdb"
cn.Open
'「TEST.mdb」内の「受注」テーブルを参照
rs.Open Source:="受注", ActiveConnection:=cn, CursorType:=adOpenForwardOnly, LockType:=adLockReadOnly
'新規ブックのSheet1にデータを写す
Set wb = Workbooks(ShinkiFile): Set ws = wb.Worksheets("Sheet1")
With ws
For c = 0 To rs.Fields.Count - 1 'フィールド名をA1から横にコピー
.Cells(1, c + 1).value = rs.Fields(c).Name
Next c
.Cells(2, 1).CopyFromRecordset rs 'レコードをA2以降にコピー
End With
'接続終了
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
'***** つづく*****
207:206
08/04/02 04:25:09
'***** つづき *****
Shitei: 'ファイル名を指定/ファイル名が適切なものになるまでダイアログボックスを閉じない②
Do
ShinkiFullName = Application.GetSaveAsFilename(FileFilter:="Microsoft Excel ブック (*.xls),*.xls", _
Title:="新規データファイル保存")
Loop Until ShinkiFullName <> "False"
On Error GoTo Shitei 'ファイル名が重複した場合
With wb
.SaveAs Filename:=ShinkiFullName
.Close
End With
End Sub
-------Sample おわり----------
○あらかじめブックを作成・レコードを転写した後に、保存する場所・ファイル名を決めるようにしてあります。
(意図されている手順を変更しています。)>①、②
○変数にvalueなどの予約語は使わないようにしましょう。
○Application.Dialogs(xlDialogSaveAs).Showでは、ファイル名を取得できません。
GetSaveAsFilenameやGetOpenFilenameの使い方をマスターされるとよいでしょう。
208:デフォルトの名無しさん
08/04/02 09:35:56
Cで言う「構造体の配列」みたいなのは、
なにで実現するのでしょうか。
209:デフォルトの名無しさん
08/04/02 10:19:58
ユーザ定義タイプの配列
210:デフォルトの名無しさん
08/04/02 12:42:58
ユーザーフォーム上のコマンドボタンを押したとき
ボタンのオブジェクト名を変数に格納する方法ってありますかね?
211:デフォルトの名無しさん
08/04/02 12:43:45
↑あ、質問間違えた。無視していい。
212:デフォルトの名無しさん
08/04/02 22:51:53
>>206.207さん大変貴重な情報ありがとうございます。さっそく試してみます。
明日に結果を報告します。
213:デフォルトの名無しさん
08/04/04 13:05:00
いつのまにかVBEのマウススクロールができるようになってたんだが。。
なんで??
Excel2003
214:デフォルトの名無しさん
08/04/04 15:59:16
ユーザ定義関数で説明文を書くには
MacroOptionsを使えばよい事がわかりましたが、
引数ごとの説明文を設定するのはどうしたら
良いですか?
215:デフォルトの名無しさん
08/04/04 19:45:26
質問です。
Application.visible = falseで本体を隠したユーザーフォーム上のコマンドボタンを押すと
新しいウィンドウでExcelのファイルを開くようにしたいのですが、どうしたらいいですか。
216:デフォルトの名無しさん
08/04/04 21:14:38
そういうふうにすれば?
217:デフォルトの名無しさん
08/04/04 23:53:05
>>213
たぶんマウスのドライバ。MSのIntelliPoint使ってるだろ?俺もなってた。
218:デフォルトの名無しさん
08/04/05 14:39:37
>>217
確かにマウス交換した。そういうことかー。サンクス
219:デフォルトの名無しさん
08/04/05 17:09:01
まさかと思うが、VB6のVBEでもスクロールできるようにするプラグインがあるのもご存じない?
220:デフォルトの名無しさん
08/04/05 19:59:18
VB6はわかりませんがどこでもホイールはまさかしたら
221:デフォルトの名無しさん
08/04/06 22:54:34
URLリンク(support.microsoft.com)
222:デフォルトの名無しさん
08/04/07 12:07:05
>>213
解決したみたいだけど sp3で 普通にできるようになったよ
223:デフォルトの名無しさん
08/04/07 15:12:34
>>221
このアドインはバグがあるからダメ
224:デフォルトの名無しさん
08/04/07 15:29:08
AddAutoScrollというものを使ってる
225:デフォルトの名無しさん
08/04/07 18:30:21
グラフ番号
(オートでVBAを記述させたときの『DrawingObjects("グラフ 2")』などの『2』の部分)
は、グラフを作るたびに自動で振られていきますが、
グラフを消去した場合も番号は累計されていってしまいますよね。
いったんグラフを作って消してから、グラフ番号をリセットすることは可能ですか?
(オートで書いた場合に、番号が『1』になるようにしたい。)
グラフ番号をリセットする魔法を教えてください。
WinXP、Excel2003です。
226:デフォルトの名無しさん
08/04/07 20:56:21
質問をさせてください。
やりたい事は変数を用いて、範囲を選択する事です。
range("A1:C3").select のように範囲を選択する際に、変数を用いたく考えております。
dim hoge , piyo
hoge = 1
piyo = 3
cells(hoge,1).select
で単一セルは選択できたのですが、範囲指定が分かりません。
cells(hoge,1) から cells(piyo,3) までを選択する方法を教えて頂けたらば幸いです。
何卒ご指導をよろしくお願いします。
227:デフォルトの名無しさん
08/04/07 22:33:10
>>266
Range(Cells(hoge,1), Cells(piyo,3)).Select
たしかRangeとcellsは同シートじゃないとエラー出るのに気をつけてね
228:デフォルトの名無しさん
08/04/08 01:19:11
>>225
確かExcel再起動しない限り不可能だったようなことをどこかで読んだ記憶がある。
で、シートの追加・削除を行うマクロを長時間起動したままだとそのうち落ちるとかだったかな?
あいまいでごめん。
229:デフォルトの名無しさん
08/04/08 12:59:51
一つのセルに複数のセルを代入したいのですが、どうやればいいですか?
一つの場合
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9")
というようにやっているのですが、二つ以上になって
Sheets("入力シート").Range("C1") = Sheets("共通設定シート").Range("D9:E9")
みたいにやると、何も表示されなくなってしまいます。
230:デフォルトの名無しさん
08/04/08 13:10:14
>>229
何がしたいのか理解できない
231:デフォルトの名無しさん
08/04/08 13:25:50
>>230
下の例間違ってました。訂正。
Sheets("シート1").Range("C1") = Sheets("シート2").Range("D9:E9")
やりたいことは、例をあげると
シート2のD9に「あい」と入っていてE9に「うえお」と入っているとすると
シート1のC1には二つ繋がった結果「あいうえお」と入れたいです。
232:デフォルトの名無しさん
08/04/08 13:48:32
vbaでやりたいなら、range("d9"),value & range("e9").value
ワークシート関数でいいなら、concatenate
233:デフォルトの名無しさん
08/04/08 14:08:14
>>232
ありがとうございます!出来ました!
234:デフォルトの名無しさん
08/04/08 15:05:42
プリンタのトレイを指定して印刷したいのですが
どうすりゃいいのか惜しえてください
235:226
08/04/08 21:01:07
>>227
上手く選択することが出来ました!
これで作業に幅が出たと思います。
本当にありがとうございました。
236:デフォルトの名無しさん
08/04/08 23:22:30
2003 XP autofilter filtermode 等
「sheet2 range("A1") に、オートフィルターがかかっている(又は、オートフィルターモード)なら、
オートフィルターを解除し、
オートフィルターがかかっていないなら、何もしない。」
どう書いたらいいですか?
237:236
08/04/08 23:24:46
揚げ忘れたwww
238:236
08/04/08 23:48:02
次で解決しました。
Sub filter0()
With Sheet2
If .AutoFilterMode = True Then
.AutoFilterMode = False
End If
End With
End Sub
239:236
08/04/08 23:48:45
次で解決しました。
Sub filter0()
With Sheet2
If .AutoFilterMode = True Then
.AutoFilterMode = False
End If
End With
End Sub
240:デフォルトの名無しさん
08/04/09 20:49:49
質問なのですが、
Sub excel_access4()
Dim dbs As New ADODB.Connection 'ADOコネクション
Dim rcs As New ADODB.Recordset 'ADOレコードセット
Dim mydbF As String 'アクセス ファイル
Dim mydbT As String 'アクセス テーブル
Dim mtr As Variant 'エクセル 全データ
Dim rcd As Long 'アクセス 行指定
Dim fld As Long 'アクセス 列指定
'例として acctest2.mdb の テーブル4 に書き込む
mydbF = "acctest2.mdb" 'アクセス ファイル指定
mydbT = "テーブル4" 'アクセス テーブル指定
'アクセスデータベースを指定
dbs.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\" & mydbF & ";"
'アクセスデータベースを開く
rcs.Open Source:=mydbT, _ 'A
ActiveConnection:=dbs, _ 'B
CursorType:=adOpenKeyset, _ 'C
LockType:=adLockOptimistic, _ 'D
Options:=adCmdTableDirect 'E
241:デフォルトの名無しさん
08/04/09 20:50:17
'エクセルシート全データ範囲(2次元配列)
With Worksheets("Sheet1").Range("A1").CurrentRegion
Let mtr = .Resize(.Rows.Count - 1).Offset(1, 0).Value
For rcd = LBound(mtr, 1) To UBound(mtr, 1) '1次行
rcs.AddNew 'LB:最小値(1) UB:最大値(5)
For fld = LBound(mtr, 2) To UBound(mtr, 2) '2次列
'アクセスに行列で書き込み
Let rcs.Fields(fld - 1).Value = mtr(rcd, fld)
Next
rcs.Update
Next
End With
rcs.Close
dbs.Close
Set rcs = Nothing
Set dbs = Nothing
End Sub
AとBはわかりますが、CDEは一体何をしているのかわかりません。
また実行すると実行時エラー3709がでます。
この実行時エラーの原因がさっぱりわかりません。
どなたか詳しい方お教え願えないないでしょうか?
242:デフォルトの名無しさん
08/04/10 01:03:15
VBAでレコード操作したことないけど
カーソルとロックタイプを指定してるだけでしょ。
SQLでレコード扱う場合の基本だからググると(ry
243:デフォルトの名無しさん
08/04/10 15:16:58
Sheet1のB5~B35に曜日を入れていきたくて
Sheets("Sheet1").Range("B5") = ("日")
Selection.AutoFill Destination:=Range("B5:B35")
上のようにVBAで書いて実行したら、エラー"1004" RangeクラスのAutoFillメソッドが失敗しました。って出るんですがなんででしょ?
Excelのほうでオートフィルしたら普通にB35まで曜日が出るんですが、VBAでやりたいので困ってます。
244:デフォルトの名無しさん
08/04/10 15:27:39
Sheets("Sheet1").Range("B5").AutoFill Destination:=Sheets("Sheet1").Range("B5:B35")
245:デフォルトの名無しさん
08/04/10 15:29:24
>>244
ありがとございます、できました
246:デフォルトの名無しさん
08/04/10 15:38:17
マクロの記録で「Selectionは使わない」「Rangeをいつでも明示する」ってオプションがあって、
それがデフォルトでもいい気がする。
247:デフォルトの名無しさん
08/04/10 15:41:19
>>246
やってみます、ありがとう!
248:デフォルトの名無しさん
08/04/10 15:45:53
あ、いやいや、そういうオプションがあったらいいな~
もしあったら、デフォルトはこれがいいな~
って妄想なので・・・
249:デフォルトの名無しさん
08/04/10 15:47:20
>>248
なるほど、そういうことですか
250:デフォルトの名無しさん
08/04/10 15:52:49
質問させてください。
WinXP、Excel2007です。
すみません、ヒントだけでもご教授下さい。
データが入ってるシートを選択したときに「sheet3」というシートにアクティブになってるシートのセルの一部をコピーしたいのです。
データが入ってるシートはたくさん増えるので、一個ずつ指定することができません…
手探り手探りつくってみたのがコレです。動きません。
Private Sub Worksheet_Activate()
Range("A3").Copy
ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("D7")
Range("A8").Copy
ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("D4")
Range("B7").Copy
ActiveSheet.Paste Destination:=Worksheets("sheet3").Range("E3")
End Sub
おねがいします
251:デフォルトの名無しさん
08/04/10 15:54:27
もう一ついいでしょうか
フォントの色を変える方法はセルを指定するしかないのでしょうか?
表を作っていてさっき質問したB5~B35に入る曜日の土日だけ赤にしたいと思っています
しかし月によって、どこに土日が入るかわからないのでセル指定ではなくて変数などを指定してやる方法はありますか?
ちなみにSelect文を使って変数の中身を替えています
252:デフォルトの名無しさん
08/04/10 16:15:12
>>250
ThisWorkbookのマクロに
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Sheet3" Then Exit Sub
Worksheets("Sheet3").Range("D7").Value = Sh.Range("A3").Value
'以下略
End Sub
253:デフォルトの名無しさん
08/04/10 16:19:40
>>251
マクロじゃなくていいなら「条件付書式」。
マクロなら、
for each cell in worksheets("sheet1").range("B5:B35")
if cell.value = "土" or cell.value = "日" then
'interiorがうんたらかんたら
end if
next
254:デフォルトの名無しさん
08/04/10 16:20:41
>>253
こればっかりはしょうがないですよね、ありがとうございます!
255:デフォルトの名無しさん
08/04/10 16:38:20
>>252
動きました!!ありがとうございます!!
ですが、sheet3をクリックすると、一瞬だけ表示されて消えてしまうのですが…
256:デフォルトの名無しさん
08/04/10 17:02:21
>>255
どんな現象か良くわからんけど、"Sheet3"を"sheet3"にすると解決する?
257:デフォルトの名無しさん
08/04/10 17:39:30
>>256
そ、それだった!
解決しましたありがとうございます。
本当に助かりました。ご迷惑をおかけしました
258:デフォルトの名無しさん
08/04/10 22:19:48
知恵をお借りしたく、書き込みいたしました。
OS:XPSP2
excel:2003
グーグル先生にお聞きしてみたところ、どうも答えが返ってこないため、こちらに書き込みいたしました。
Excelを利用して、
①Webの検索フォームにA列に記載された文字列を入力し検索
②表示されたページの指定したテキストボックスに記載された文字列をB列に貼り付け
を繰り返すマクロを組もうと頑張っているのですが、どうにも②が解決できません。
できればお知恵を貸していただけないでしょうか?
宜しくお願いします。
259:デフォルトの名無しさん
08/04/10 22:53:35
一概には言えない。
どのページか書いたら、答えが返ってくるかもな。
260:デフォルトの名無しさん
08/04/11 00:05:31
ちょっと外部には出せない類のページでorz
こちらもphpで生成されたhtmlのページしか見れないため、htmlのソースからデータを取り出す形でやっているのですが...
文字列の部分だけを改変したhtmlのソースなら見せられると思うのですが、それでは駄目ですか?
261:デフォルトの名無しさん
08/04/11 00:29:57
なんだ、それなら文字列検索すればいいじゃん。
何が問題なんだ?
262:デフォルトの名無しさん
08/04/11 00:40:18
>>260
大事な情報扱ってるなら2chなんか頼るな
プログラム板、プログラマー板、ソフトウェアー板を徘徊して
ネタ探し回ってる奴いてるよ
解答者の振りして「それじゃ答えられない」「もっと具体的に」と
最後はネタパクられちゃうからね
もしくは「それは素人には無理。業者に出す仕事だ。」色んな言葉で揺さぶられるだけ
動的HTMLは俺も扱った
ここの板で聞いたけどいくら質問しても答えなんかない。
それよりファイル操作できる(ファイルの読み書きできる言語)調べろ
2chで調べたらダメだよ
解答者装った変なのが張り付いてるから
図書館やインターネットで調べてネタは誰にも言うな。
ファイルの読み書きだ。
くどい様だけどマジで2chの板は気おつけろよマジレス。
263:デフォルトの名無しさん
08/04/11 00:59:00
>>262
ありがとうございます。
他の板だと、色々とあるんですが、初めてヌクモリティを感じました。
お世話様でした。ありがとうございます。
264:デフォルトの名無しさん
08/04/11 01:08:35
>>262
そんなコストパフォーマンスが悪いことやってるの、引きこもりくらいだろwww
265:デフォルトの名無しさん
08/04/11 01:23:15
被害妄想
266:デフォルトの名無しさん
08/04/11 01:45:39
バリバリのマクロ使いは質問者の2~3行読んだだけで
何を意としているかはわかってるよ
わかった上で「それじゃよくわかんないよ」「もう少し具体的に」
それじゃこれか!
わざとずれた解答のマクロ出してくる
質問者は一気に信用する
質問者が自分で改編できないことは解答者はわかってるw
やがて改めて聞きに来るのはほぼ確実。
あとは「もう少しだから頑張ろう」とか適当に良きアドバイザーを装って
ネタぱくったら、さよならベイビーwww
解答者の計算どおりネタはぱくって答えは出さない
計算どおりにいきそうにないときは多数を装い
マナーだの常識だの礼儀だの罵倒する役柄と
優しさと知識を持ち合わせた解答者が入り混じる
少しくらい教えたところでこんなトコで質問してるレベルの奴に改編なんか無理。
質問者は解答してもらいたいのでペコペコしながら
最後は言われるがままw
偽解答者は初めからわかってるんだよ
とくにファイル操作関係は気をつけたほうがいい
VBAに限らず他の言語もね
267:デフォルトの名無しさん
08/04/11 01:54:22
病院行った方がいいよ
268:デフォルトの名無しさん
08/04/11 01:55:59
そちらからお先にどうぞ
269:デフォルトの名無しさん
08/04/11 02:02:19
なにこいつ
270:デフォルトの名無しさん
08/04/11 02:31:16
なんかすごい長文で不安煽ってるのがいるが安心しろ
オレがじゃんじゃん答えてやるから、そのままHTMLをうpれ
271:デフォルトの名無しさん
08/04/11 02:37:53
プッ
んじゃタグ抜きマクロでも書いてみ
リンク、object、span ヨロチクビ
それ見てから質問するか考えるわw
272:デフォルトの名無しさん
08/04/11 02:58:31
>>258
は、どう見てもパクるに値するネタでない事だけは確かw
273:デフォルトの名無しさん
08/04/11 03:09:59
どうみても金儲け絡んだ情報収集にみえますが
次のレスでは>phpで生成されたhtml
ピンポ~ン!99%の確立で当たりましたね
274:デフォルトの名無しさん
08/04/11 10:58:32
頼むからコテつけてくれ。あぼんするから。
275:デフォルトの名無しさん
08/04/11 22:01:41 BE:378334793-2BP(380)
やっぱ Excel VBA で マルチスレッディングって 無理?
276:デフォルトの名無しさん
08/04/11 22:15:07
Excel 2003 のVBA の言語仕様書ってどこかにないでしょうか。
277:デフォルトの名無しさん
08/04/11 23:40:11
やるならマルチプロセスだなw
278:デフォルトの名無しさん
08/04/12 13:44:44
OS : windows XP
バージョン:excel 2002
VBAでのクラスモジュールの使い方がさっぱりわかりません。
コレクションの要素を設定/取得するだけのクラスすら作れません。
どこが間違っているのか&どう直せばいいのか、どなたか!m(_ _)m
'--クラスモジュール----Class1
Private a As Collection
Private Sub Class_Initialize()
Set a = New Collection
End Sub
Public Property Let mAdd(ByVal value As Integer)
a.Add (value)
End Property
Public Property Get mGet()
a.Item (a.Count)
End Property
279:デフォルトの名無しさん
08/04/12 13:45:27
'標準モジュール------
Sub test()
Dim i As Integer
Dim cal As Class1
Set cal = New Class1
'プロパティへの代入
For i = 1 To 3
cal.mAdd (i)
cal.mGet (i)
Next i
End Sub
280:278=279
08/04/12 14:10:33
自己解決しました
ものすごく恥ずかしい質問をしてしまいました><
281:デフォルトの名無しさん
08/04/12 16:53:54
>>277 kwsk
282:デフォルトの名無しさん
08/04/12 17:06:14
ActiveX EXE、アウトプロセスCOMサーバでぐぐれ
283:デフォルトの名無しさん
08/04/13 20:36:16
図形の線色を変更する為にソースの中に、
Selection.ShapeRange.Line.ForeColor.RGB = RGB(255,10,10)
と指定したのですが、
Line.ForeColor.RGBと指定するのは出来るけど良くないとの指摘を受けました。
VBやVBAの常識では、Selection.ShapeRange.Line.ForeColor.SchemeColor = 2
等とするらしいのですが・・・
RGBだとどのような弊害があるのでしょうか?
常識的な事を質問してすみません。
どなたかご教えて頂けませんか?(>_<)
284:デフォルトの名無しさん
08/04/14 00:06:12
なんで指摘した人に聞かないの?
285:デフォルトの名無しさん
08/04/14 00:25:53
>>284
ご指摘頂いたかたに何度か理由をお聞きしましたが、
常識なんだから当たり前と明確な裏付けを貰えなくて、
それで知人や本、ネットで調べても分からずじまいで、
ご質問させて頂きました(>_<)
286:デフォルトの名無しさん
08/04/14 03:22:55
Line.ForeColor.RGB使ってたときは左辺にどんな値を代入してたの?
287:デフォルトの名無しさん
08/04/14 03:29:49
あ、ごめん書いてたなwwww(ゲラプゲラオプスwww
たぶんあれだろ。RGB値だと何の色を指定してるかわからりずらいからだろ。
っつってもどっちもマジックナンバー状態だから(ry
っつーかつい最近はじめてVBAさわった俺からすると
コンパイラの方でこういう色の値は予約語としてもっとけと思ったな
288:デフォルトの名無しさん
08/04/14 03:56:11
それを答えるために詳しく聞いてたのかよ
なんだこいつ
289:デフォルトの名無しさん
08/04/14 07:31:44
わかりづらいなら定数定義すりゃいいだけだしよくわからんな
290:デフォルトの名無しさん
08/04/14 20:01:59
>288-289
全然俺の言いたいことを理解してないな。
さすがVBAしかさわったことのないゴミどもだwwwwwwwww
ちょろっと触った感じ、他のコンパイラと比べて
半端なく使いづらいからVBAそのものが昔から進化してねぇんだろうな。
まぁお前等のレベルもそこで停滞してるのもしゃあねぇわなwwww
291:デフォルトの名無しさん
08/04/14 20:58:09
VBAを学ぶのにオススメの書籍を紹介してください.
VBAは全く初めてですが,C,fortranならそこそこ使えます.
よろしくお願いします.
292:デフォルトの名無しさん
08/04/14 21:43:08
マクロを記録して生成されたソースを見るのが一番参考になる
293:デフォルトの名無しさん
08/04/14 21:49:00
なるほどwww
294:デフォルトの名無しさん
08/04/14 22:29:42
今日は釣果がいまいちですね
295:デフォルトの名無しさん
08/04/14 23:08:49
Application.quit
ThisWorkbook.close savechange=false
でExcelを終了させているのですが、
5回に1回くらいプロセスが残ることがあります。
GUIは消えてるのですが・・
Excel2003です。
296:デフォルトの名無しさん
08/04/14 23:20:38
未解放のリソースが残ってるんじゃねーのか?
297:デフォルトの名無しさん
08/04/14 23:28:10
>>296
特に無いと思います・・
DBとか使って無いし
ファイル出力はそのたびクローズしてるんで。
そもそも、リソース未開放だとプロセス残るんですか?
298:283
08/04/15 00:27:43
283の書き込みした者です。
(NG)…RGBプロパティ使用
Selection.ShapeRange.Line.ForeColor.RGB = RGB(255,10,10)
(GOOD)…SchemeColorプロパティ使用
Selection.ShapeRange.Line.ForeColor.SchemeColor = 2
右辺のマジックナンバーには目をつぶってもらって、
RGBとSchemeColorプロパティの観点で見て欲しいです。
今の時点で常識と言う言葉が出てきていない時点で
VBA使用者の常識では無さそうですね。
299:デフォルトの名無しさん
08/04/15 00:39:13
個人的には、RGB(255, 10, 10)が(RGBの順だという前提で)やや白い赤とすぐ判るが。
Excelのオペレーションで考えると、自由に色を使うと言う感じではなく規定の色から選択して使うイメージだよね。
その色がSchemeColorなんだから、VBAをExcelのオペレーションの延長と捉えるならその方がいいということなんでは?
300:デフォルトの名無しさん
08/04/15 00:40:43
>>299
俺もそうだと思う
301:283
08/04/15 00:59:05
>>299
>>300
返答ありがとうございます。
>Excelのオペレーションで考えると、自由に色を使うと言う感じではなく規定の色から選択して使うイメージだよね。
規定色で書かれた図形とは、違う色としたい要件でしたので、
規定色は使わずに赤=0~255, 青=0~255, 緑=0~255を自由に選ぶようにしていました。
色の自由度が求められる要件で、あえて色の制約があるSchemeColorの方が良いのかが分からないのです(>_<)
302:デフォルトの名無しさん
08/04/15 01:07:56
>>301
その用件を知らないんじゃなく?
知ってたらあり得ないだろ
303:デフォルトの名無しさん
08/04/15 01:16:14
>>301
おまいにひとつ教えてやろう
Excelでは、「赤=0~255, 青=0~255, 緑=0~255を自由に選ぶ」
ってのは無意味
Excelで表現できるのは、パレットに登録されてる56色のみ
「赤=0~255, 青=0~255, 緑=0~255を自由に選ぶ」をしたところで、
56色の中から一番近い色が選ばれるだけだよ
304:283
08/04/15 01:16:59
>>302
もちろん、そのご指摘したかたは要件を知っています。
VB/VBAの使用者なら誰もが知っている常識と言われて
しまったので私がただ単に無知なだけと思っていましたが、
やはり302さんが仰るとおり、有り得ないことみたいですね。
305:283
08/04/15 02:52:06
>>303
それはセル等に適用されると言うのは当然その通りだと思います。
今回の対象のシェイプにもは適用されないのでは無いでしょうか?
実際に試してみると分かると思いますが、少しずつ値を変えて、
並べて表示していくと、56色以上同時に表示出来ますから。
306:303
08/04/15 05:05:36
>>305
すまん、完全に俺の早とちりだった
Dim i As Long
For i = 0 To 255
With Cells(i + 1, 2)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, .Left, .Top, .Width, .Height)
.Fill.ForeColor.RGB = RGB(i, 0, 0)
Cells(i + 1, 1).Value = .Fill.ForeColor.RGB
End With
End With
Next i
図形は好きな色使えるな
SchemeColorの色数も81色だし(重複はあるが)
結論として、指摘した人が俺と同じ早とちり OR 知ったか OR 低脳って事で、
俺はおまいが正しいと思うよ
307:デフォルトの名無しさん
08/04/15 05:27:02
>>306
>>305じゃないけど
あんた漢だよ
308:デフォルトの名無しさん
08/04/15 19:46:38
>規定色で書かれた図形とは、違う色としたい要件
(;´Д`)何この要件・・・
「ある規定色で描かれた図形とは別の色を使う」って意味じゃねぇのか?www
Excelで規定された色と違う色を使うことになんの意味がるんだと小一時間(ry
要件も理解する側がアホだったらとんでもない意味に変化するからな。
まず常識的に考えて(ry
309:デフォルトの名無しさん
08/04/15 21:50:25
!?
310:デフォルトの名無しさん
08/04/15 22:17:58
“不運(ハードラック)”と“遭遇(ダンス)”だぜ?
311:デフォルトの名無しさん
08/04/15 23:57:19
283 303ではないけれど、
そいや、昔のverで、色の指定でRGB値だとうまく行かなくて
あれれーと思っていろいろ実験したなぁ。
確かに出来るやつと出来ないやつがあって、調べたけど、結局
>>303
と同じ考えに至って自分を納得させたことがありました。
312:デフォルトの名無しさん
08/04/16 00:02:45
自分勝手に色決めてると白黒印刷でわけわかんなくなる可能性大
313:283
08/04/16 01:14:55
>>303
>>306
ひとまず303のさんのおかげで、VBAの図形に関しては、制約が無い事が実証されました。
この質問スレ見てる人達の共通認識になったと思うので、これで良かったと思いますよ。
ありがとうございました。
314:デフォルトの名無しさん
08/04/16 01:20:12
文字が入っている終端のセルを指定する方法はちらほら見かけるんですが、
一番先頭のセルから終端までを選択する方法ってありますか?
A列の途中から文書の中身が始まります。
開始の行数は変動します。
開始から終了まで、50行×20行ほどです。
文書の開始は必ず同じ内容のValueのセルです。
For文で開始のセルのValueを検索し、Thenで結ぶ、ぐらいまでは考えたんですが
そこから先がまったく予想もつきません。
もしも一番先頭の(文字の入っている)セルより前の空白の行を
すべて消去するうまいやり方があったら教えてください。
空白の行さえ消せれば文書の中身のセル番地が固定されるので、
(テンプレートが決まっていて、いつも全く同じ順番に並びます)
番地を指定してデータを他シートにコピー&ペーストできます。
イメージ図
A列 B列 C列
1行 空白 空白 空白
2行 空白 空白 空白
・
・
・
n行 aaa bbb ccc
A列をaaaで検索
aaaのRange(A,n)のnを取得
1からn-1行を削除
どうかよろしくお願いします。
315:303
08/04/16 01:32:45
>>314
Range("A1").Resize(Range("A1").End(xlDown).Row - 1).EntireRow.Delete
316:314
08/04/16 08:36:38
>>315>>303
たった一行で! ありがとうございます
これで仕事もはかどります。本当に助かりました
317:デフォルトの名無しさん
08/04/16 09:09:35
エクセルで
VBAを使うのは
地獄に落ちる
最適手段
アクセスで
VBAを使うのは
神の身許に
至る近道
318:デフォルトの名無しさん
08/04/16 13:46:42
エクセルからアクセスへステップUPするのは、比較的大変なんですか?
319:デフォルトの名無しさん
08/04/16 14:04:26
そういうもんじゃないし
320:デフォルトの名無しさん
08/04/16 17:52:39
>>318
君のアタマの柔軟性次第。
321:デフォルトの名無しさん
08/04/16 19:03:22
エクセルは未来のアクセスで
アクセスは未来のエクセル也
地獄と極楽を永劫回帰
322:デフォルトの名無しさん
08/04/19 00:24:35
ようやくうちの会社の全PCにアクセスが入ったんだが
何に使うのかよく分からない
アクセスだとできるけどEXCEL+VBAだとできないことって何?
楽で見栄えが良くなるってだけなのかな?
EXCELVBAはそこそこ使えるようになったが
アクセスを勉強するか、エクセルをさらに研鑽するか迷う
323:デフォルトの名無しさん
08/04/19 01:30:45
>>322
C++などからもデータベースにアクセスできるとかじゃね?
そりゃ、C++でもExcelはいじれるけど・・・
324:デフォルトの名無しさん
08/04/19 06:14:05
>>322
Excelも便利だがAccessもいいぞ。
業務アプリのGUIも作れるし、百万件ぐらいのデータ処理とかも可能。
RDB+VBA+レポート。
何でも出来てしまうので、何でもやりすぎてしまう。
そんなツール。
325:デフォルトの名無しさん
08/04/19 06:55:20
Excelを正しく使わないと会社はすぐ、Access等のDBを導入しようとするが
そこに待っている世界は....
326:デフォルトの名無しさん
08/04/19 06:57:49
>>322
エクセルを研鑽するにしてもアクセスのようなデータベースを知ってからのほうがいいです。
エクセルしか知らないと斜め上のテクニックばかりに身に付いちゃうかもね。
327:デフォルトの名無しさん
08/04/19 07:29:25
EXCELの典型的斜め上テクニック
串刺し演算
セルの結合
複雑な集計はVBAで
報告書、仕様書、企画書その他何でもEXCELで
328:デフォルトの名無しさん
08/04/19 08:29:18
>>322
例えばファミレスの注文データベースを作るとします。
一回の注文には複数の料理が含まれるとして
注文件数の合計
料理別の数量合計
を計算したい時、あなたならどんな表を作って集計しますか?
329:デフォルトの名無しさん
08/04/19 10:25:45
>>328
お前がAccessで作ろうと思ってる表と同じもの
330:デフォルトの名無しさん
08/04/19 10:41:03
もっとrelationalなもの作るだろ?(それなりに高いスキルは要るが)
Accessのデータ構造は単純に日付/客ID/料理ID/点数
で決まり。必要に応じてSQLで集計する。
331:デフォルトの名無しさん
08/04/19 10:55:25
Excelでも同じ構造でいいじゃん。何か不都合でも?
332:デフォルトの名無しさん
08/04/19 11:24:43
ファミレスごときのメニューでリレーショナルなものってwwwwww(ゲラプッチョwww
高いスキルってwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
333:デフォルトの名無しさん
08/04/19 12:28:23
EXCELだと一定数のデータの集計だと
中間集計取りながらリアルタイムで全体見ながら
データ入力出来るから集計は早い。
だが、どんどんデータが入ってくるよう
な対象には弱い。量が増えてくると
ニーズも増えて、細かい集計項目追加の嵐
魑魅魍魎になって作成者も理解できなくなる
こういった対象にはDBのほうがまだ強い
ってか、こういったニーズを解決する為に
DBが作られた(とも言える)
334:デフォルトの名無しさん
08/04/19 14:30:27
>>322
素人レベルならエクセルで十分だと思うよ
>>323
ほとんど関係ないよ
>>333
大筋は合ってるけどDBってのは戦後からある概念だよ。
DB→Accessの意味で言ってるのかな?
335:デフォルトの名無しさん
08/04/19 16:21:45
戦後って久しぶりに聞いたわ
336:デフォルトの名無しさん
08/04/19 16:23:15
もはや戦後ではない
337:328
08/04/19 17:18:29
>>330が示したモデルでいいでしょう。
客IDだとお客さんをIDで区別してそうな印象を与えそうなんで注文IDと呼びかえますね。
さらに何番の席で受注したか、その席は禁煙席か喫煙席かも記録しましょうか。
日付/注文ID/席番号/喫煙区分/料理ID/点数/
338:328
08/04/19 17:33:28
24番の禁煙席に案内したお客さんが、やっぱり55番の喫煙席に移動したいと希望したら、データもそれにあわせて訂正したいですよね。
Excelだとこの場合、席番号と喫煙区分を何行も書きかえないといけません。
この時、席番号だけ直して喫煙区分を直し忘れたりしないように気を付ける必要もあります。
339:デフォルトの名無しさん
08/04/19 17:43:11
いや、それはどう考えてもExcelの使い方が悪い。
340:デフォルトの名無しさん
08/04/19 17:59:15
どう考えたんだよ
341:328
08/04/19 18:00:51
Accessなどのリレーショナルデータベースではこのような問題が解決できる仕組みが提供されています。
>>339
まあお好きなように。
342:デフォルトの名無しさん
08/04/19 18:21:09
Excelは横展開でデータを記載しないと使い勝手悪い。
Accessは縦展開でデータを追加してかいて、用途に応じて必要な表に組み合わせる。
343:デフォルトの名無しさん
08/04/19 19:58:47
データの持ち方次第でAccessだって修正箇所多くなるだろ?
どの座席が喫煙/禁煙なのかなんて予約データに関係ないんだから別の場所にあればいいじゃん。
「Aさんは24番の禁煙席を予約している」じゃなくて「Aさんは24番を予約している」「24番は禁煙席である」だろ?
データ構造(設計)にExcelやAccessが関係してくるのか?
344:328
08/04/19 20:59:31
>>343
正規化のことを言っているのですね。
おっしゃる通り、喫煙区分は席番号に従属しています。従属の解消はExcelでも簡単です。VLOOKUPを使えばいいのです。
Excelが苦手なのは注文と料理のような一対多の関係を扱うことです。
345:デフォルトの名無しさん
08/04/20 01:23:54
マスタの種類が増えれば増えるほどLOOKUP系では扱いづらくなるな
VBAで条件増やしたLOOKUP亜種を作成しても良いけど、自分だったら素直にSQLを
書くほうを選ぶ
346:デフォルトの名無しさん
08/04/20 15:29:49
Enabledでテキストボックスをロックしたときに文字の色が変わらないようにしたいんだが、できるか?
347:デフォルトの名無しさん
08/04/20 15:30:50
できるがお前の態度が気に食わない
348:346
08/04/20 19:04:54
すまなかった。他のことは出来るんだが、なぜかこればかりは頑張って探しても見つからなかったんだ。
人に聞くってのは、勇気がいるもんなんだぜ。こんな質問のために荒れるのはいやだろ?さぁ教えてくれ。
349:デフォルトの名無しさん
08/04/20 19:10:22
なんだそりゃ脅迫か?
350:デフォルトの名無しさん
08/04/20 19:11:14
>>348
できるか?に対してちゃんと「できる」って言ってくれたんだから
贅沢言うなよ
351:デフォルトの名無しさん
08/04/20 20:11:10
>>348
荒れるのは嫌だが、お前に教えるのはもっと嫌だ。
352:デフォルトの名無しさん
08/04/20 20:29:04
荒れて結構w 誰も困らないスレだwww
353:デフォルトの名無しさん
08/04/20 20:43:40
あるシートに在るセルの内容を
別のシートにコピーするにはどうしたらいいですか?
シート名はプログラム内に書き込まれてあって、
もしコピー先のシートがなければ、新規にシートをつくりたいのです。
354:デフォルトの名無しさん
08/04/20 20:53:22
>>353
その操作をキーボードマクロで捕捉してみたら?
355:デフォルトの名無しさん
08/04/20 22:52:39
>>354
頭良いですね。
ありがとう。
356:デフォルトの名無しさん
08/04/21 18:45:55
>>355
普通。俺は何もプログラミング言語分からず、VBAに挑戦した。独学で色々して、悩んでもがいて、なんとかクラスモジュールを使えるくらいまでになった。
まずはすぐ聞かずに、マクロ記録とかぐらい試せ。
357:デフォルトの名無しさん
08/04/21 20:01:01
>>356
クラスモジュールを使うとどんなことが実現できるの?
358:デフォルトの名無しさん
08/04/21 20:35:56
>>356-357
まさにそこで今ハマってます。
Excel2007みたいな感じで、ステータスバーに「合計」と「データの個数」が
常に両方とも表示されていたら便利だなぁ、と思ってこんなマクロを書いてみました。
------------------------------------------------------------------------
Sub Worksheet_SelectionChange(ByVal Target As Range)
  'ステータスバーに「合計」と「データの個数」を二つとも表示
  Application.StatusBar = " 合計=" & WorksheetFunction.Subtotal(9, Target) & _
              " データの個数=" & WorksheetFunction.Subtotal(3, Target)
End Sub
------------------------------------------------------------------------
これを、PERSONAL.XLSに書けば動くかなー、と思って気軽にやり始めたのですが、
甘くなかったです・・・。
いろいろググったり、詳しい人に聞いてみたりしたら、どうもクラスなるものを
使わないと解決しなさそうな感じなんで、今必死こいてクラスの勉強しとります。
359:デフォルトの名無しさん
08/04/21 20:59:45
VBA使いはひどいなwwww
根本理解してないというか理解しようとしていないwwww
動けばいいやーっていうスタンスでやってきたからそうなる
360:デフォルトの名無しさん
08/04/21 21:33:20
> 根本理解してないというか
やっぱそうかー。なんか「VBA使い」に恥をかかせたようでスマン…。
たぶん、俺がひどいだけだと思うんだ。
361:デフォルトの名無しさん
08/04/22 04:05:16
準マスター文書として使えるのがVBA/OLE未使用文書
準々マスター文書として使えるのがVBA/OLE多用文書
半端に使ってるものは信頼性が一番低く、生ゴミ文書
扱いになる。
362:デフォルトの名無しさん
08/04/22 10:01:48
ステータスバーを使わずに
メッセージボックスやユーザホームで
"処理中です・・・・ " & Count & "行"
と表示させながら裏で実行させる方法ってありますか?
例えばMsgBoxとかで表示させると、そこで止まってしまうんですが・・・
363:デフォルトの名無しさん
08/04/22 12:51:57
>>361
ExcelアプリとExcelデータは区別したほうがいいってことね。
364:デフォルトの名無しさん
08/04/22 13:39:50
>>362
msagent
365:デフォルトの名無しさん
08/04/22 14:07:46
ユーザフォーム
366:デフォルトの名無しさん
08/04/22 14:44:10
>364
ありがとうございます、やはりこの手の処理方法は
VBAのみで実現するわけじゃないんですね
ちょっと面白そうなので、VBS使ってその方向で検討してみようと思います
367:デフォルトの名無しさん
08/04/22 14:46:54
VBSでやれることはVBAでもやれるぞ。
参照設定にあるはずだ。
368:デフォルトの名無しさん
08/04/22 15:51:55
use form
369:デフォルトの名無しさん
08/04/22 16:06:57
引数で受け取った配列(arr)が1次元か2次元かを判定する方法で
今は
On Error Resume Next 'エラー出力を停止する
lng = UBound(arr, 2)
lngErr = Err.Number
On Error GoTo 0 'エラー出力を再開する
のようにUBound()関数を使用してエラー発生の有無で判定してるのですが
他に良い方法ないでしょうか。。
370:デフォルトの名無しさん
08/04/22 18:07:20
>>369
エラーを意図的に起こして別の情報を得るコードは
Acess-VBAなど、DBという会社システムでは泣く子も黙る世界と因縁の深い汎用機大型機の
コードでは常套手段。
やはり一般的にはしないほうがいい。
特にAccessなどDBが絡むシステムでは、VBA使うだけでも領域侵犯とみなされやすい
ので注意。
371:デフォルトの名無しさん
08/04/22 19:37:09
>>362
初心者の俺が解答するから間違ってたらごめんよ。
例えば、50件のデータを処理する場合はカウンタ変数を作っておいて、1件の処理終わる度にそれに1ずつ足していけばいいと思うよ。そして、「処理件数/全件数」をユーザーフォームに貼りつけたラベルに表示するのを繰り返す。
マスターの皆さん見当違いだったらご指摘をお願いします。
372:デフォルトの名無しさん
08/04/22 19:43:05
>>371
忘れてた。
裏で処理するなら「Application.ScreenUpdating」を使って画面更新止めたり、EXCELを非表示にした方がスマートかな。
373:デフォルトの名無しさん
08/04/22 19:58:37
VBAであんまり凝ったことをやろうとしない方がいいと思うがな
作り捨てアプリ作成言語として割り切って使った方が前向きかも
374:デフォルトの名無しさん
08/04/22 22:25:26
昔は無茶ばかりしたなあ
375:デフォルトの名無しさん
08/04/22 23:05:11
>>374
kwsk
376:デフォルトの名無しさん
08/04/23 00:29:53
バカクライアントが作ったエクセル表
きままにセル結合したり、色に意味持たしたり、2行結合のセルと2行間に罫線が無いセルに
それぞれ意味があったり、その行数が20行位まで別条件だったり、もう気が狂いそうです。
これをコンバートする為にまず整形しなければならず、1万行近い定期案件なのです。
凝った事をやるつもりはさらさらないが仕事だから仕方ないのです
377:デフォルトの名無しさん
08/04/23 01:19:56
>>369
SDKに配列の要素があるかどうかの判定をするAPIがあったはず
名前忘れたけど
378:デフォルトの名無しさん
08/04/23 09:01:12
>>369
配列の次数やレンジを引き数に積んで貰わないの?
379:デフォルトの名無しさん
08/04/23 09:12:15
エラーで判定がいやなら、無難にIFかCaseでいいんじゃないの?
380:デフォルトの名無しさん
08/04/23 09:20:37
>>376
工数出せばいいだろうに。
・お前のウンコシート使って無理矢理自動化すると1人月
・俺様が作ったスマートな表を使って自動化すれば0.5人月
両案出して上司に決済させろ。
381:デフォルトの名無しさん
08/04/23 15:14:59
1愚人月
0.5賢人月
382:デフォルトの名無しさん
08/04/23 23:59:01
ActiveWorkbook.Pathで、自分のファイルの存在場所がわかりますが、
拡張子をxlsからxlt(テンプレート)に変えた場合、保存されていない
状態でOpenしますので、xltファイルの存在Pathが取得できません。
元となった、xltファイルの存在場所のPathを知る方法は無いでしょうか?
Googleでは、「ファイル→開く」だとPathは取得できるが、xltファイルを
ダブルクリックで開いた場合は裏技的なコードを書かないとダメと書いてあり
その人はそのコードを無くしてしまったとあったのですが…
URLリンク(www.keep-on.com)
383:ゆうすず
08/04/24 13:05:32
こんにちは、お邪魔します。
エクセル2003、ウィンドウズXPを使用しています。
マクロの記述は本で調べるなどして奮闘中ですが、
調べてもわららないことがあったので書き込みさせていただきます。
家のパソコンだと、なぜか[ツール]→[マクロ]とすすんで、
本来だったら[マクロの記録]となるのでしょうが、
ここが白抜きで実行できません。
セキュリティも下げてみたりしたのですが、どうにもわからなくて…。
なんだか初歩どころか一歩も進んでいないような質問で、大変恐縮なのですが、
どなたか教えていただけると助かります。
よろしくお願い致します。
ゆうすず
384:デフォルトの名無しさん
08/04/24 13:08:08
以下のような部分でプログラムが止まってしまいます。
どうも関数内の「"」がVBAの中での「"」と混同されているらしく、
うまく回避できません。いっそ「0」に置き換えてもいいのですが・・
Sub Finding_Nimo()
Range("A41").Formula = _
"=IF(ISERROR(VLOOKUP(B1,$DC$2:$DD$48,2,FALSE)=TRUE),"",(VLOOKUP(B1,$DC$2:$DD$48,2,FALSE)))"
End Sub
いい解決法は無いでしょうか?
385:デフォルトの名無しさん
08/04/24 13:12:04
>>383
セルがダブルクリックされた状態になっているのでは?
他のセルを選択しなおせばOKのはず
386:デフォルトの名無しさん
08/04/24 13:20:00
>>384
この場合は、「""」は「""""」と記述すれば上手くいくと思うよ。
387:デフォルトの名無しさん
08/04/24 14:39:11
>>386
おお、上手くいきました。ありがとうございます!
388:デフォルトの名無しさん
08/04/24 21:24:09
OS:XP Excel2003
共有フォルダにあるファイルを開きたいのですが、
どのように書けば共有フォルダを指し示すのでしょうか?
例えばCドラにあるファイルなら「C:\ファイル名」
と書きますよね。