1 :
デフォルトの名無しさん :
05/01/07 23:30:29
2 :
デフォルトの名無しさん :05/01/07 23:57:31
22
3げっと。
このスレをたてたのは私。そして私は4様。誰もこないな。。。
5 :
デフォルトの名無しさん :05/01/10 16:22:47
スレ立てお疲れ様です。 Excel2002で早速質問なのですが、 今Sheet1がアクティブになっている状態で、Worksheets("Sheet2").Range("A1").Select のコードを実行しようとしたのですが、「RangeクラスのSelectメソッドが失敗しました」 とエラーが出ます。 Sheet2は存在する状態にも関わらず、なぜSelectできないのでしょうか。 ご回答いただければ幸いです。
6 :
いけめん太郎 :05/01/10 16:34:47
>>5 Sheet2をアクティブにしてからA1を選択してはいかがですか?
僕も質問させていただきますと、
Excel2000にて、セル範囲の各値を、
10項目(セル)ずつ、スペースを一つずつ空けてテキスト形式にて
保存する方法を探しています。
1 1 1 1 1 1 1 1 1 1 **項目
2 2 2 2 2 2 2 2 2 2 ** (値)
のように、右端に項目名を書き込みし、
その下の段の右端にその項目の値を書き込みたいと思っています。
セルの値のところ 1 1 1 1 の辺りは、一行の値を書き込み、
右端に一項目ずつ、見やすく記入したいと思っています。
Cells() で指定し、Print()にてファイルに書き込むと、
大きなタブが入ってしまいます。
セル範囲の参照は、ベタ打ちでもOKです。
ご意見よろしくお願い致します。
7 :
デフォルトの名無しさん :05/01/10 20:31:55
Public Sub 変数を使った計算例() X = 10 X = X + 20 Range("A1").Value = X End Sub 基本的なことが・・・・反映することができません〜
>>6 Print → Write でどう?
>>7 質問の意味がよくわからないけど、単に呼び出してないだけとか。
9 :
デフォルトの名無しさん :05/01/10 21:55:11
>>5 ActiveなシートしかSelectできないです。
ちなみにValue取得はActiveでなくてもできます。
10 :
デフォルトの名無しさん :05/01/10 21:58:44
>>7 うちでは問題なくできました。(Excel2000)
11 :
デフォルトの名無しさん :05/01/10 22:11:08
>>6 >>9 SelectするにはActiveにしないといけないのですね。
とても参考になりました。ありがとうございます。
12 :
デフォルトの名無しさん :05/01/10 22:19:50
7ですができました。実行していませんでした。
>>6 少し、違うかもしれないが、
1 セルの幅を数値に合わせる。
2 テキスト(スペース区切り)*.prnで保存
14 :
marukome :05/01/11 12:17:33
こちらで質問してよくなければどこかへ誘導して頂けたらうれしいです。 <アップロードの処理> エクセルVBAで、あるサイトをIEで開く処理まではやっとできたのですが、 そのサイトの(テキストボックス?)にローカルのパスとファイル名を 入れて、ボタンを押すという作業をさせたいと思います。 ソースを見てみたのですが、どうもPHP3とか書いてあるのですが、 よく分かりません。 何かヒントなりあればよろしくお願いします。
15 :
marukome :05/01/11 13:58:24
sendkeys を使っても、そのサイトが更新されたらすぐに使えなくなって 困ってます。不安定なので、できればなんとかならないかと
16 :
デフォルトの名無しさん :05/01/11 17:33:00
End Subの後に Option Base 1をいれたらエラーがでるのです。 エラーをださない方法ありますか?
17 :
デフォルトの名無しさん :05/01/11 19:32:33
>>16 Option Base 1ステートメントはモジュールの先頭でしか宣言できなかったと思う。
なので、End Subの後に入れるのは不可能っぽいです。
18 :
デフォルトの名無しさん :05/01/11 19:43:11
>>17 ご返答ありがとうございます。
Option Base 1を先頭にしてみます。
>>14 with ie.Document.Forms(0)
.Item("テキストボックスのName").Value = 値
.Submit
end with
細かいところは、目的のフォームに合わせて変えてくれ。
>>19 ありがとうございます!
早速試してみます。
また、よろしくお願いします!
OutLookの予定表画面で [ファイル]→[インポートとエクスポート]→[ファイルへエクスポート]→[MicrosoftExcel] としてエクスポートしたExcelファイルを開くと、 "内容"の列に改行文字(?)として"・"が表示されることがあります。 これを削除したくて、次のようなソースを書きましたが、 依然として"'・"と表示される、文字のようなもの(選択できません)が残ります。 どうやったらExcel上で消えるんでしょうか? Sub ToNoLf() '改行コード削除 Cells.Replace What:="" & Chr(10) & "", Replacement:="", _ LookAt:=xlPart, SearchOrder:= xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False End Sub
言葉足らずでした。 上に書いたマクロを実行すると、"・"が減るんですが、"・"が 2つあるセルは1つだけになるということです。 文字コードに弱いのでどなたかお願いします。
>>21 OutLook持ってないから確かめられないけど、
改行コードがCR+LFなんじゃないかな?
そうだったらCRも同じ方法で除去すればOK
文字コードはChr(13)
まとめて、vbCrLfでもいけそうだけど、環境依存になるかも。
あと、空白セルは見ても仕方ないので、CellsよりUsedCellsとか
の方がよさげ。
24 :
デフォルトの名無しさん :05/01/12 12:44:15
サブフォームに表形式フォームを組み込んでいるのですがスクロールさせると 最後のレコードの後に灰色の隙間が3レコード分くらい空いてしまう (表形式フォームをサブフォームに組み込むとデフォルトでこうなると思います) のですがこれを消すことは出来ないでしょうか? 分かりにくいかとは思いますがご教授お願い致します。
25 :
デフォルトの名無しさん :05/01/12 17:13:12
26 :
marukome :05/01/12 19:50:47
>>19 さん。
せっかくヒント与えていただいたのに、
すみません、できませんでした。
↓がExcel側のコードです。実際細かいところでつまづいていると思います。
よろしくご教授お願いします。
-----------------------------------------
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "
https://***/*****.php3?action=4 "
Do While objIE.Busy = True
DoEvents
loop
-----------------------------------------
>>23 できました!ありがとうございます。
> あと、空白セルは見ても仕方ないので、CellsよりUsedCellsとか
の方がよさげ。
仮ソースなので自動記録のマクロをいじっただけなんです。。。
28 :
marukome :05/01/12 19:51:36
下記がソースです(一部伏字) ---------------------------------------- <form action="*****.php3" method="post" enctype="multipart/form-data"> <input type="hidden" name="action" value="1"> <tr> <td> <input type="file" name="***file" value="" size="20"> <a href="Javascript:openSubWindow('/guide/?m=n&s=18')"><img src="****.gif" width="16" height="14" border="0" align="absmiddle" alt="○○な○○"></a> </td> </tr> <tr> <td align="center"><input type="submit" value=" アップロード "></td> </tr> </form> ----------------------------------------
29 :
デフォルトの名無しさん :05/01/12 20:42:22
Sub 配列の要素数を変更() Dim Wakusei() As String ReDim Wakuswi(1) Wakusei(0) = "水星": Wakusei(1) = "金星" ReDim Preserve Wakusei(3) Wakusei(2) = "地球": Wakusei(3) = "火星" End Sub これを実行するとエラー9インデックス有効範囲ではありません となるのですが、どうすれば解除することができるのでしょうか?
>>29 ネタにマジレスかもしれんが、
Wakuswi(1)→Wakusei(1)
マジボケだったら、option Explicit をおすすめする。
31 :
デフォルトの名無しさん :05/01/12 21:04:03
>>30 ご返答ありがとうございます。
間違い訂正してもエラーが出ます
option Explicit をつければなおるのですか?
先頭につけるものなのかな〜
32 :
デフォルトの名無しさん :05/01/12 23:51:30
>>29 うちの環境では問題出ませんでした。(Excel2002)
>>30 の変数の訂正をした後ね。
これでエラーが出るならちょっと分からないかも。。
33 :
デフォルトの名無しさん :05/01/13 00:32:04
同じ2002なのに、エクセルの方に何か書けばいいのかな〜
34 :
デフォルトの名無しさん :05/01/13 01:02:47
>>33 option base 1ステートメントは宣言してないでしょうか。
もししていたなら、Wakusei(0) = "水星"でエラーになります(要素数0は存在しないため)。
考えられる原因としたらこのぐらいかな。。
他にはモジュールにsubプロシージャなどは記述していませんか?
35 :
デフォルトの名無しさん :05/01/13 11:09:07
36 :
デフォルトの名無しさん :05/01/13 17:41:23
>>34 ご返答ありがとうございます。
option base 1の所に書いてありました。
他のモジュールの方でためしたら、エラーはでなかったです。
でも何もエクセルの方に反映されませんでした。
こういうのがいくつかあるのです・・・こういうものなのでしょうか?
37 :
デフォルトの名無しさん :05/01/13 21:01:20
>>36 どういたしまして。解決できて良かったです。
>でも何もエクセルの方に反映されませんでした。
これはsubプロシージャの変数がセルに反映されていないという意味でしょうか?
>>29 のプロシージャだけだと、実行してもセルなどには何も反映されません。
もしセルに変数の値を反映させたいのならば、cells(1,1)=Wakusei(0)などとします。
上記はA1セル(cells(1,1)またはRange("A1"))にWakusei(0)の値を代入せよという意味です。
38 :
デフォルトの名無しさん :05/01/13 22:25:07
>>37 やっぱりセルに書かないと反映されないのですね
色々モジュールに書いているのですが必要なのかどうかわからなくなっています
まだ本の最初の方だからそういうふうに思うのかな〜
後半になればVBAのすごさがわかるようになるのかな〜
39 :
デフォルトの名無しさん :05/01/13 22:43:18
セルに反映したいのにセルに書く(代入する)のが面倒ってことかな。 何か意味が分からない。 処理中は2次元配列変数に代入しておいて最後に一括してセルに 反映することもできます。
40 :
デフォルトの名無しさん :05/01/13 23:28:39
VBAで書かなくてもセルに書いた方が早いと思っているのです。 まだVBAすごさがわかっていません。 今の時点ですごいのだけど、それに気づいていないのかな〜 反映すると面白いと思う、でも必要性を考えると ? これからなのかな?
42 :
デフォルトの名無しさん :05/01/14 00:15:23
>>40 セルに書いた方が早いなら無理にVBAでコードを書かなくても良いような気がします。
結局は「適材適所」、これに尽きるかと。
自分は業務で同じ作業を手で何度もやるのが面倒&間違う恐れもあるためVBAを使うことが多くなりました。
ヘルプも多少分かりづらい部分があるとはいえ、有用ですよ。
あとは、マクロ記録をしてどういうコードが記述されるか見ていくうちに、徐々に分かってくるようになっていくかも。
43 :
デフォルトの名無しさん :05/01/14 00:37:58
>>42 ご返答ありがとうございます。
もうちょっとがんばってみます。
VBAでゲームが作れるみたいですね
まだまだ先かな〜
エクセルからmdbファイルに接続してレコードを取得する時 Sheets(1).Range("A1").CopyFromRecordset r こんな感じでレコードを取得できるんですが セルに表示させる前にレコードの各要素を配列変数で受け取りたいと思って Dim X(0 to 9) As Strange 中略 X.CopyFromRecordset r といった感じで、配列に渡そうとしても出来ません 配列変数などに入れる方法ってあるんでしょうか?
>>26 こんな感じでどうでしょう
Sub test()
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "file://c:\test.htm"
Do While objIE.Busy = True
DoEvents
Loop
SendKeys "{TAB 3}", True '環境に合わせて数字を変更してください
SendKeys "c:\test", True '参照に表示させたい文字列
Set x = objIE.document.all.tags("input")
For Each y In x
If y.Value Like "*アップロード*" Then
y.Click
End If
Next
End Sub
質問させてください。 プライベート関数の中からgoto構文を使ってパブリック関数へ飛ばす際、 パブリックで必要な処理が終わった後に再びプライベートの中のgotoの次の行の処理を させることは出来るのでしょうか? ちょっと分かりにくい説明かも知れませんが、例えば、 private sub プライ() Goto 処理1 Goto 処理2 end sub purlic sub パブ() '処理1 label1.caption = "まいった '処理2 label2.caption = "困った" end sub こんな感じの文で、処理1が終わった後に一旦プライベートの方に戻り、それから再び 処理2の方に進みたいのです。 すいませんがどなたか力を貸してください。
>>46 Goto構文は流れが分かりにくくなって、バグを誘発するだけだから
できるだけ使わないほうがいいと思うが。
普通にこんな感じではだめ?
private sub プライ()
Call 処理1
Call 処理2
end sub
public sub 処理1
label1.caption = "まいった
end sub
public sub '処理2
label2.caption = "困った"
end sub
>>47 どうもありがとうございます!
Call構文自体今まで知らなかったです。
いやぁ無知は罪なもんですねw
今からCall構文について調べてみます。
ありがとうございました!
49 :
デフォルトの名無しさん :05/01/16 19:36:28
条件付き書式によって変わっているセルの色を取得する方法 はないでしょうか? .Interior.ColorIndexでは元の色しか返ってきません お願いします
>>46 >>47 さんの処理1と処理2を1つの関数にまとめるなら、
Private Sub プライ()
Call パブ(1) '処理1
Call パブ(2) '処理2
End Sub
Public Sub パブ(Arg As Integer)
Select Case Arg
Case 1 '処理1
label1.Caption = "まいった "
Case 2 '処理2
label2.Caption = "困った"
End Select
End Sub
という感じで。
>>50 初心者には難しいですがなんとかできそうです
ありがとうございました
>>52 SpecialCells(xlCellTypeAllValidation)
を使えば少しは楽になるかな。
とにかく、Excelで色の取得するのは何かと大変。。。
確か隠し関数にちょうどいいのがあった気がするんだけど、
何だったっけ?
54 :
デフォルトの名無しさん :05/01/16 22:51:13
エクセルで確率密度関数(Px)に対応した累積分布関数(Fx)の値を作成したい のですが、乱数の値が1の場合、確率密度関数が0.05に対応した累積分布関数の値 の算術式はどのようになるのでしょうか?
>>54 それはVBAじゃなくて、単にExcelの関数で十分なのでは。
補足。 よくある分布関数なら、NORMDIST、BETADISTとかで。 積分可能な関数なら積分した式をぶち込めば終わり。 むちゃくちゃな分布なら・・・セルに計算させて足し算?
58 :
デフォルトの名無しさん :05/01/18 23:27:25
Sub セル範囲を習得_エラー処理() Dim prRange As Range On Error GoTo errMSG Set prRange = Application.InputBox(Prompt:="印刷範囲を選択してください"), _ Title:="印刷範囲指定", Type:=8) With ActiveSheet .PageSetup.PrintArea = prRange.Address .PrintPreview End With Exit Sub errMSG: MsgBox "処理を終了します" End Sub エラー処理がエラーになる・・・ _ がいけないのでしょうか?
うちではエラー出ませんね。 てか、括弧が多いのは直してますよね。
60 :
デフォルトの名無しさん :05/01/19 00:03:11
あっ確かにカッコが多い。でも本にこう書いてる。 カッコはずしてためしてみます。ご返答ありがとうございます
61 :
デフォルトの名無しさん :05/01/19 00:11:52
はずしたらできました。ありがとうございます
62 :
デフォルトの名無しさん :05/01/19 16:57:12
イベントプロシージャに関する質問です。 特定の列のセルをダブルクリックしたときにだけ マクロを実行するにはどのようなコードを書けばよいのでしょうか? B列のどれかのセルをダブルクリック→イベントプロシージャ それ以外のセルをダブルクリック→反応無し としたいのです。 IfやActivecell.Rangeなどで試行錯誤したのですがうまくいきませんorz 教えて下さい。よろしくお願い致します。
Worksheetイベント BeforeDoublClick Target.Column = 2
64 :
デフォルトの名無しさん :05/01/20 00:49:23
質問させてください。 Access VBAでクラスモジュールを作成、クラスモジュール内で自身のクラス 名を取得したい場合、どのようにすればよいでしょうか。 クラスモジュール内でデバッグ用に、現在実行中のクラスが何処かをmsgbox で表示させたい、というのが意図です。 宜しくお願いいたします。
65 :
デフォルトの名無しさん :05/01/20 03:05:37
AutoFilterの質問なんですが。 本に、 With Range("出荷伝票テーブル") .AutoFilter 2, "=スーパーマルジュウ", xlOr, "=フードランド" .AutoFilter 8, ">=1999/8/1",xlAnd, "<1999/9/1" End With というVBAがあって、これを例えば With Range("出荷伝票テーブル") .AutoFilter 2, "=スーパーマルジュウ", xlOr, "=フードランド" .AutoFilter 3, "=アイス",xlOr, "=苺" End With のようにして計4つのキーワードの抽出をしたいのですが、こうすると 全部消えてしまいます。AutoFilterを2つ使う場合、1つはキーワード もう一つは期間でやらないとダメなんでしょうか?
>>63 回答ありがとうございます。
大変参考になりました。感謝感激♪
68 :
デフォルトの名無しさん :05/01/20 21:07:15
>>45 ありがとうございました。できました。
後段のfor eachの処理をこれからですが
勉強します。本当にありがとうございました!
遅くなりましてすみませんでした。
70 :
デフォルトの名無しさん :05/01/22 22:54:58
X 1 2 3 4 P(x) 0.25 0.15 0.1 0.05 F(x) 0.7 0.85 0.95 1.0 Rnd関数により一様乱数を生成後、ある確率密度関数に従う乱数の生成は、 乱数―確率関数−累積分布関数のテーブルを用いて行う。上の表を参照 して 乱数(x)の値と累積分布関数の値F(x)を用いて乱数を作成するFunctionプロシージャ を作成してください。 次に、生成した一様乱数の値yが F(xi) ≦ y < F(xi + 1) のときに、乱数Xは「xi + 1」とする。 例えば、乱数Rndの値yが0.567の場合、 F(0.45) ≦ y(0.567) < F(0.7) となり、乱数Xとして「5」を選択する。 Functionプロシージャの実行結果(乱数の発生結果) はエクセルのA12以下から結果が出るようにしたいです。 長文すいません。よろしくお願いします。助けてください。
71 :
、、、、 :05/01/23 00:10:33
どうしてもわかりません 天才の方々どうか教えて下さい。 セルの中の文字列をコピーする コードがわかりません。 Excel中のセルの中の文字列を ボタン一つでコピーして ロータスのノーツに貼り付けたいのです。 一つのセル全体をコピーするのは記録で 作れますが、セルの中の文字列をコピー するという記録がうまくいきません。 どうかお助け下さい。
>71 ビジネスソフト板のExcelスレで同様の質問があり、回答も付いてるので向こうを見てこい
下のようなコードを実行すると"loopに対応するdoがありません"というエラーが出てしまいます。 こんなエラーは見たことがなかったのですが、どこがいけなかったのでしょうか? どなたか教えてください。お願いします。 sub 照合() Dim finale0 As Integer finale0 = Workbooks(acw0).Worksheets("基本").Cells(Worksheets("基本").Rows.Count, 9).End(xlUp).Row Dim finale1 As Integer finale1 = Workbooks(acw1).Worksheets("基本").Cells(Worksheets("基本").Rows.Count, 9).End(xlUp).Row Dim gyou0 As Integer Dim gyou1 As Integer gyou0 = 6 gyou1 = 4 Do Until gyou0 = finale0 If Workbooks(acw0).Worksheets("基本").Cells(gyou0, 9) = Workbooks(acw1).Worksheets("基本").Cells(gyou1, 2) Then Workbooks(acw0).Worksheets("基本").Cells(gyou0, 15) = Workbooks(acw1).Worksheets("基本").Cells(gyou1, 7) gyou0 = gyou0 + 1 gyou1 = 4 Else gyou1 = gyou1 + 1 If Workbooks(acw1).Worksheets("基本").Cells(gyou1, 2) = "" Then gyou0 = gyou0 + 1 gyou1 = 4 End If looping: Loop end sub
>>74 1あぁ・・・本当だ・・・これを見つけられずに一週間も悪戦苦闘してた俺って一体・・・orz
どうもありがとうございます。
OS:XP Access Version:2003 すいません、えっと 前もって変数が決められたものに対してSETステートメントを実行するときにクエリーで抽出させる方法はありますでしょうか? ---------------------------------------------------------------- 例: クエリ名 Q施工内容 抽出したい変数名 TEL Dim TEL AS String * 20 Set DB_01 = CurrentDb() Set ST_01 = DB_01.OpenRecordset("Q施工内容",dbOpenSnapshot) ---------------------------------------------------------------- このときにクエリを開く際にTEL変数の抽出をしたいのです。 何か構文はありますか? それとも他に良い方法がありますでしょうか? よろしくお願いします。
77 :
デフォルトの名無しさん :05/01/24 18:19:42
CompactDatabaseでaccess97からaccess2003に変換する場合の dbVersionの値はいくらのでしょうか? 4.0(access2002)以上ってないのでしょうか? 誰かご存知の方は教えてください。
>>76 何が聞きたいのかさっぱり分からないんだが、
誰か分かる?
79 :
デフォルトの名無しさん :05/01/25 20:02:52
Excelで時間割を作っています 「セルA1に時間を入力すると、そこを参照してセルB1に色を付ける。」と言ったことがやりたいのですが 例えばセルA1の値が9:00〜9:15(時間)の間であれば、セルB1に赤色を着色する様にしたいのですが どうすればできるでしょうか、どうかご教授下さい。
80 :
デフォルトの名無しさん :05/01/25 21:30:00
>>79 Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Left(Target.Text, 1) = 9 Then
If Right(Target.Text, 2) <= 15 Then
Range("B1").Interior.ColorIndex = 3
End If
End If
End If
End Sub
>>79 Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Select Case Target.Value
Case Is > TimeValue("9:15")
Range("B1").Interior.ColorIndex = xlNone
Case Is >= TimeValue("9:00")
Range("B1").Interior.ColorIndex = 3
Case Else
Range("B1").Interior.ColorIndex = xlNone
End Select
End If
End Sub
おはようございます、レスありがとうございます。 教えて頂いた式で想い通りの動作が確認できました。 いつもとは違い私には込み入った物を作っていますので 助かりました、ありがとうございました。
84 :
デフォルトの名無しさん :05/01/26 11:07:23
>>79 です
度々すいませんが、解らなくなったので再度質問させて下さい。
If Target.Address の部分にもう一つのセルの時刻を取得させて
(セルA1(9:00から9:15の間の値))かつ(セルA2(15:00から15:15の間の値))であれば
(セルB1に赤色を着色、セルB2に青色を着色、セルB3に青色を着色、以下任意に追加)と言うようにできるでしょうか?
セルA1(開始時刻) と セルA2(終了時刻) を取得して
15分区切りの升目(セル)を、B列に作って居るので、時間の目盛りに沿って塗りつぶしたい(多色)のですが
よろしければ教えて下さい。
85 :
デフォルトの名無しさん :05/01/26 22:38:16
エクセルのワークシートって、横(カラム)は、256までしかないの? 縦(ROW)はいくつまであるの??
65536
87 :
デフォルトの名無しさん :05/01/26 23:49:08
さんくす
>>86 やっぱ、横(カラム)は、256より増やせないんですね??
>84 何がしたいのかさっぱり分からんぞ 前半のA1とA2がB1,B2,B3と、どうリンクしてるのかも謎だ 前半と後半では質問内容が違うみたいだ まず81氏のSelect Caseステートメントか IF,Then Elseステートメントを使えば何でもできるぞ Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Column = 1 Then If .Value > TimeValue("9:15") Then .Offset(0, 1).Interior.ColorIndex = xlNone ElseIf .Value >= TimeValue("9:00") Then .Offset(0, 1).Interior.ColorIndex = 3 Else .Offset(0, 1).Interior.ColorIndex = xlNone End If End If End With End Sub A列の時刻からB列の設定をする場合は If .Column = 1 Then をトリガーにして、Offset(0, 1)で指定すればいいし A1とA2をトリガーにしたい場合は If .Address = "$A$1" Or .Address = "$A$2" Thenとか If .Row < 3 and .Column = 1 Thenなんか 使えば良いんだ 分かるところまで自分でコード作って考えてみないと作れないぞ
89 :
デフォルトの名無しさん :05/02/01 16:25:24
ユーザーフォームにテキストボックスが4個あるとして、 ある条件をみたした時に、 カーソルを好きなテキストボックスへ持っていきたのですが、 どうすれば良いでしょうか?
90 :
デフォルトの名無しさん :05/02/01 16:26:02
×持っていきたのですが、 ○持っていきたいのですが、
If (条件) Then TextBoxXXX.SetFocus End If
>90 氏ね
>>89 まず間違いなく92=89だが、「氏ね」のセリフを吐くだけで正答を書いてくれている
91さんには何にもなしかよ。
これじゃ日本がおかしくなるわけだ。あぁ嫌だ嫌だ
94 :
デフォルトの名無しさん :05/02/03 09:59:29
昨今の不況で日本人は心まで貧しくなってしまったのかねぇ。
91氏の答え以上に 答えようが無いし、これで出来るはずなんだけどなぁ 聴く方ももっと、具体的に自分なりに考えて書いたコード載せて 何をしたいのか、明確にしたほうが良いと思われ ここで、もらった答えをコピペでは その場しのぎにしかならないよ
Excel vbaに限って言えば、プログラム経験が全くない人がウェブで質問しているケースが 多いように思う。 碌に変数の定義のしかたさえ知らない輩が、答えを教えてもらってシメシメとか思っているん だろうな。第三者の視点から見ていても、今後の保守管理を当人が出来るのか心配になって くるよ。 俺は絶対に自分が理解できるまで、他人から教えた貰ったコードは流用しないがね。
97 :
デフォルトの名無しさん :05/02/04 18:41:59
VBAを使えるようになりたいと思って本屋さんに行ってきたんですが ワードのVBA、エクセルのVBAと、別々の本になってました。 まさかそれぞれが独立してるとは思ってなかったので 何も買わずに帰ってきました。 最初にどれから学ぶべきなんですか? ちなみに僕はアクセス使ってて、 最初から定義されてるマクロだけじゃ思うように出来なかったので VBAをと思ったんですが。 でも、どうせ憶えるならエクセルのが良さそうだし・・・
>97 勉強する目的を明確にしろ。 それ以上助言できん。
99 :
デフォルトの名無しさん :05/02/05 00:19:43
>>97 ExcelかAccessがええんとちゃう
いや、俺もこれから覚えたいのだが
Word VBAって意味ある?
漏れの職場では一部の課が桐とか使ってるが 今から勉強するならExcelかAccessだろうな Excelも、その内部にVBそのものが実装されてるから 極めるとAccessのファイルやらCSVファイルやらオラクルのファイルをコントロール出来るようになる VBAはExcelからはじめるのが取っ掛かりやすいかと 必要であれば、その先にあるAccessとかVB、SQL、オラクルを勉強すればいいし Word は・・・・ 会社の方針でワードで作ってくれと 言われなきゃ使わないなァ Word VBAも使ってない
OutlookのVBAを使ってみようと思ったらマクロ自動記録機能がないから、 どんなソース書けばいいかわからん。ヘルプじゃわからんし。ガックシ
102 :
デフォルトの名無しさん :05/02/06 22:06:51
shellからOutlookExpressを起動させてメールを作成したいんですが、添付ファイルの やり方がわからない・・・。誰か教えてくれないかなぁ。↓ネットで検索してここまでは分かった だが。 Shell "C:\Program Files\Outlook Express\msimn.exe /mailurl:mailto:宛先?bcc=宛先&subject=件名 &body=本文%20"
word VBAはいらんかも。 俺ならexcelかaccessでデータ抽出・適当に加工後、wordを起動して張り付ける。 情報処理の観点からすれば、それで十分でしょ。
>>102 なんで、そんなメールボムみたいなのを作ろうとしてるんだ?
105 :
デフォルトの名無しさん :05/02/07 20:35:28
sheet1からsheet2のセルをクリアしようとするとほんの一瞬画面がsheet2に移ってしまいます。 これをうつらないようにするにはどうしたらいいんでしょうか。 またhideで隠していたシートをvisible = trueとして表示する時にも同じように一瞬画面がそのシートに移ってしまいます。 これもどうしたら直るのかおしえてください。
openするまえにhideする
得意先とのやりとりに使うプログラムなのでメーラーに送信履歴を残しておきたいのだよ。 メルボするなら態々メーラーを起動しないでSendMailを使って送信するわな。
ログファイル作るだけでいいじゃん
営業や重役がOEで確認したいんだとさ。
hideしていたのを戻す時にも画面が移ってしまうんですが、それはどうしたらいいのでしょうか?
よく読んでないが、 Application.ScreenUpdating = False でどう?
おお!できましたっ!! ありがとうございます。
113 :
デフォルトの名無しさん :05/02/09 15:20:08
質問させて下さい Case文で、特定のセルに入力された時間の値を下記のように取得させたのですが 例) Case Is = TimeValue("7:00") これを2つのセルから値を取得できる様にしたいのですが Case Is = セルA1TimeValue("7:00") and セルA2TimeValue("7:00") このようにする形式はあるでしょうか? 2つのセルから値を取り出して、どちらも正ならばAの処理をするとしたいのですが。 どうかご教授下さい。
>>113 Select Case True
Case Range("A1").Value = TimeValue("7:00") And Range("A2").Value = TimeValue("7:00")
MsgBox "どちらもTrueなのでAの処理をする"
End Select
ってこと?
読み辛いなぁ。 これならifにandで羅列していったほうが可読性は高そうだが・・
そうか? Select Caseは自分の場合、殆ど使わなかったんだが Target.Value をつかうことしか思いつかなかったよ Select Case Trueの"True"を使うことでずいぶんスッキリまとまっていて 114氏のセンスのよさを感じたよ With Target If .Address = "$A$1" Or .Address = "$A$2" Then If Range("A1").Value = TimeValue("7:00") And Range("A2") = TimeValue("7:00") Then MsgBox "Aの処理をする" End If End If End With 漏れの頭ではこんなふうにしか書けなかったよ
117 :
113 :05/02/10 10:46:55
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$5:$D$6" Then
Select Case True
Case Range("D5").Value = TimeValue("7:00") And Range("D6").Value = TimeValue("20:00")
Range("D43:BH43").Interior.ColorIndex = 4
Case Else
Range("D43:BH43").Interior.ColorIndex = xlNone
End Select
End If
End Sub
>>114 様ありがとうございました、教えていただきました通り
上記のように関数を書き換えてみました、しかし巧く動作してくれません
何処か書式に誤りがあるでしょうか?
118 :
113 :05/02/10 11:02:24
質問し直したばかりですが、いまうまく動作させることができました。 慌ててしまい失礼しました。 下記手直しの文です。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Address = "$D$5" Or .Address = "$D$6" Then Select Case True Case Range("D5").Value = TimeValue("7:00") And Range("D6").Value = TimeValue("20:00") Range("D43:BH43").Interior.ColorIndex = 4 Case Else Range("D43:BH43").Interior.ColorIndex = xlNone End Select End If End With End Sub
>>118 そういう処理なら、私ならこう書きます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Check As Boolean
If Intersect(Target, [D5:D6]) Is Nothing Then Exit Sub
Check = Range("D5").Value = TimeValue("7:00") _
And Range("D6").Value = TimeValue("20:00")
Range("D43:BH43").Interior.ColorIndex = IIf(Check, 4, xlNone)
End Sub
120 :
デフォルトの名無しさん :05/02/11 06:06:08
114はいい! 良いセンスしてる。
121 :
118 :05/02/11 19:12:05
>>114 こういう処理もあるのですね、参考になりました。
If Intersect(Target, [D5:D6]) Is Nothing Then Exit Sub
Check = Range("D5").Value = TimeValue("7:00") _
And Range("D6").Value = TimeValue("20:00")
Range("D43:BH43").Interior.ColorIndex = IIf(Check, 4, xlNone)
1行目の[D5:D6]の部分と 2、3行目の("D5")("D6")と同期して、4行目の処理が行われますが
参照セルを増やして個別の処理をさせることはできるでしょうか?
1行目の[D5:D6]を[$A:$B]などに代入処理して、別途式を作る途中ですが
例えばD7に値が入力された場合、2、3、4行目の処理内容を変えるようにできるでしょうか?
122 :
デフォルトの名無しさん :05/02/11 19:12:22
条件付書式をマクロでいじる方法ありますか?
ありません
>>122 マクロの記録でちゃんと記録されるよ。
あとは自分で好きなように弄ればいい。
「FormatConditions」でググれば解説してるサイトもあるし。
125 :
デフォルトの名無しさん :05/02/11 19:37:59
excelのVBAについてお聞きしたいのですが。 例えば、A列が分類分け、 B列が値 そして、C列は、A列に応じた計算式によって値が入る Aが ○ だったら C=B*100 Aが ● だったら C=B*200 Aが ■ だったら C=B*300 ※○●■はキーワード みたいな感じにしたいのです。 いろいろ勉強して、select caseを使うことによって 1件目限定なら実現できたのですが それを、A列にデータが入っていれば2件目以降にも 自動的に適用されるようにすることができません。 どなたかアドバイスをいただけないでしょうか? レベルは初心者です。
>>125 >A列にデータが入っていれば2件目以降にも 〜
というのがよく判らんのだけど、ここら辺もう少し詳しく書いてくれたら。
127 :
デフォルトの名無しさん :05/02/11 20:31:28
125です。
>>126 説明が足らなくて、申し訳ありません。
例えば、野菜を扱う表だったとして
A1 に大根 と入力すれば C1=B1*100 の値
A2 に人参 と入力すれば C2=B2*200 の値
A3 に白菜 と入力すれば C3=B3*300 の値
という感じです。
うまく伝わればよいのですが。
この表で言えば、A1の部分(1件目)だけなら、調べたサンプルを参考に
成功したのですが、この定義を2件目以降にも適用しようとして、
詰まっています。
入力済みデータの件数を取得して for next を使って、select caseを使ってとか
いろいろやってもうまくいかないもので。
近くに詳しい人もいない環境なので、良いアドバイスをいただけたらと思います。
>>121 やりたいことをもっと詳しく説明してくれないと、なんとも言えません。
たぶんできるとは思いますけど。
excelでやるもんじゃないな
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Column = 1 Then
If .Value = "大根" Then
.Offset(0, 2).Value = .Offset(0,1).Value * 100
ElseIf .Value = "人参" Then
.Offset(0, 2).Value = .Offset(0,1).Value * 200
ElseIf .Value = "白菜" Then
.Offset(0, 2).Value = .Offset(0,1).Value * 300
End If
End If
End With
End Sub
そういうのは
>>88 を参考にOffsetを使うと良いよ
多分、Select Caseとか価格表とか使って操作した方が
もっと、スマートに記述できると思うが。
話し変わるんだけど、喪前らDim とか Constとか 最初に記述する宣言文って、やっぱり全部、Subの先頭に集めてる? 漏れの場合は、Subの中で分かれた各処理群の先頭に分割して Dimを記述してるんだけど 一箇所にまとめるとどの宣言文だったか 分からなくなってくるんで・・・
>>132 俺もそう思いながら書いたんだw
3つしか書いてなかったから
そこは、価格表とかつくってやればいいかと。
つーか130はインデントしろよ。
136 :
121 :05/02/11 21:17:31
>>128 D5:D6のセルを参照してD43:BH43の色を変更していますが
この式のまま、多数の参照先とそれに対する処理を作りたいんですが。
1行目の[D5:D6}と2、3行目の("D5")("D6")、そして4行目の("D43:BH43").を代入演算子で置き換えて
If Intersect(Target, [$A:$B]) Is Nothing Then Exit Sub
Check = Range("$AA").Value = TimeValue("7:00") _
And Range("$BB").Value = TimeValue("20:00")
Range("$C1:$D1").Interior.ColorIndex = IIf(Check, 4, xlNone)
$A = D5ならば$AA=D5、$BB=D6、$C1=D43、$D1=BH43 D7ならば別のセルを割り当てる
として、想定したセル内に値が入力されるとこの式で処理できるようにしたい訳なのですが。。
RDB使えよ
138 :
デフォルトの名無しさん :05/02/11 21:36:44
>>136 >D7ならば別のセルを割り当てる
この場合それぞれどのセルになるのかまで分からなければ
コードを簡略化させる時の法則がわかりません。
D列の場合のみ処理するというのであれば、最初の行を
If Intersect(Target, [D:D]) Is Nothing Then Exit Sub
にしておけばよさそうですが。
>>139 「最初の行を」じゃなくて「最初の行だけは」でした。
それ以降の部分は、D7の時どうなるかによって変わります。
141 :
デフォルトの名無しさん :05/02/11 21:58:48
125です。
>>130 ありがとうございました。
野菜は例えで使っただけで、
実際に扱うものは、めったに単価が変わらないんですよ。
(ほぼ100掛けなんだけど、たまに200掛けとか300掛けのが混じったりとか)
だから、あらかじめその分類ごとに計算式を取得できたら
楽だなと思ったもので。
あとはEXCELの勉強の意味もあります。
教えていただいた構文は、うまく動作しませんでした。
もう少しにらめっこしながら、悩んでみます。
ありがとうございました。
43行目から色を変えてるわけだからMAXでも42行目なのかな。 5行目以降から処理するとして、 If Intersect(Target, [D5:D42]) Is Nothing Then Exit Sub でしたね。
143 :
121 :05/02/12 08:51:16
>>142 レスありがとうございます
TargetセルはD5〜G10の範囲なんですが、Targetを指定したとして
2行目以降の処理を個別に指定したいのです。
Targetセルが一つであれば以降の式には、そのままセル名を直接書けばいいのですが
複数指定した場合、配列に格納しておいて自動的に消化される様にできないかと思ったんです。
$A = (Target A = 処理A、 Target B = 処理B、 Target C = 処理C)
簡単に考えるとこういう物で、以降の該当箇所に代入されて処理されていく様にできないでしょうか?
>>143 あなたのやりたいことがいまいちわからないのですが、
以下のコードで参考になりますか?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ChangeArea As Range
Dim Cell As Range
Set ChangeArea = Intersect(Target, [D5:G10])
If ChangeArea Is Nothing Then Exit Sub
For Each Cell In ChangeArea
MsgBox Cell.Address '一つのセル
Next Cell
End Sub
ここのセル(例えばD7,E8,F9,G10)がそれぞれこうだったらここのセルに
こういう処理をするというのを書いてもらえればわかりやすいんですけどね。
145 :
143 :05/02/12 11:11:46
>>144 If Intersect(Target, [D5:D6]) Is Nothing Then Exit Sub
Check = Range("D5").Value = TimeValue("7:00") _
And Range("D6").Value = TimeValue("20:00")
Range("D43:BH43").Interior.ColorIndex = IIf(Check, 4, xlNone)
それぞれの処理についてですが
D5に7:00と入力され、かつ、D6に20:00と入力された場合は、D43〜BH43 に色を塗る
いまはこの処理のみですが
D7に7:00と入力され、かつ、D8に20:00と入力された場合は、D44〜BH44 に色を塗る
D9に7:00と入力され、かつ、D10に20:00と入力された場合は、D45〜BH45 に色を塗る
と処理先を変更したいのです。
参照先がこの程度なら、式をそのまま参照セル分コピーするのですが、参照先が膨大になるため代入処理したいと
思って居るんですが、なにか良い手はありませんか?
>>145 それだけの情報しかないのであれば、こうなります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Check As Boolean
With Target
If .Count > 1 Then Exit Sub
If Intersect(Target, [D5:G10]) Is Nothing Then Exit Sub
If .Row Mod 2 = 0 Then Set Target = .Offset(-1)
End With
With Target
Check = .Value = TimeValue("7:00") _
And .Offset(1).Value = TimeValue("20:00")
.Offset(38 - (.Row - 5) \ 2).Resize(, 57).Interior.ColorIndex _
= IIf(Check, 4, xlNone)
End With
End Sub
E,F,G列の場合の色を塗る範囲が判断できませんので、それは
ご自分で工夫なさってください。
ここ最近の10レスぐらいの間に
全て、やり方が散りばめられてるんだがなァ
Worksheet_Changeのトリガーを
.Column = 4 とかにして
あとはOffsetかCellsを使って
>>146 氏のOffsetとresize使うか
Range(Sheet01.Cells(.ROW, 4), Sheet01.Cells(i, 60)).).Interior.ColorIndex
とか使えば良いだけなんだが
訂正 Range(Cells(.ROW, 4), Cells(.ROW, 60)).Interior.ColorIndex
149 :
デフォルトの名無しさん :05/02/13 00:33:24
Sub ブック内ハイパーリンク作成() Dim i As Integer Worksheets.Add after:=Worksheets(Worksheets.Count) i = Worksheets.Count ActiveSheets.Name = "Sheet" & i Worksheets(1).Activate Worksheets(1).Hyperlinks.Add _ anchor:=Worksheets(1).Range("B65536").End(xlUp).Offset(1), _ Address:="", _ SubAddress:="'" & Worksheets(i).Name & "'!A1", _ TextToDisplay:=Worksheets(i).Name End Sub ActiveSheets.Name = "Sheet" & i の所いけないみたいなのですけど どういう事なのでしょうか? エクセルのシートに名前が必要なのでしょうか?
ActiveSheets.Name × ActiveSheet.Name ○
151 :
デフォルトの名無しさん :05/02/13 01:09:36
Excel2000のVBAでUserFormにWebBrowserコントロールを貼って
以下のようなコードを書きました
Sub test()
UserForm1.WebBrowser1.navigate "
http://www.2ch.net/2ch.html "
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
UserForm1.Show
MsgBox TypeName(pDisp)
MsgBox TypeName(pDisp.document)
End Sub
これを実行すると、まず左フレームに板一覧
右のフレームに「2ちゃんねるへようこそ」が表示され
一つ目のMsgBoxで「WebBrowser」と表示されるのですが、
二つ目のMsgBoxのところで
「実行時エラー'438':オブジェクトはこのプロパティまたはメソッドをサポートしていません。」
というエラーが出て止まってしまいます。
原因を調べようと、二つ目のMsgBoxのところにブレークポイントを設定し
pDispをウォッチしてみたところ、型が「Object/WebBrowser」と表示されてるにも関わらず
クラスメンバーが一つも無く「<変数なし>」と表示されるという不可解な状態でした。
何故こんなことが起こるのでしょうか?
これを検出し回避する方法はあるのでしょうか?
TypeName(pDisp)で「WebBrowser」と表示されてしまっては
WebBrowserクラスの持ってるメンバーは全て持っていると判断して
メンバー変数にアクセスしてしまうわけですが、
そこでエラーが出てしまって、どうコーディングしていいか困ってしまいました。
どなたか、よろしくお願いします。
152 :
デフォルトの名無しさん :05/02/13 05:24:16
Excelのアドインを作成しているのですが、オリジナルのアイコンを 使ったツールバーも一緒に配布したいと思います。 faceidを使った既存のアイコンではなくてAdobeのAcrobatのように オリジナルのイメージを使ったものなのですが どうやればいいのですか。 ググって、ワークシートにあるビットマップをVBAでコピーして facepasteという方法があることもわかったのですが、 xla内にあるワークシートにビットマップを置いておく方法が わからないのです。 何かいい方法はありませんか。
エクセルとか下らないプログラムをシェアで 出してるところってあるよな・・・しかもソース弄れないとか
154 :
デフォルトの名無しさん :05/02/13 14:59:09
>>150 どうもありがとうございます。うまく起動することができました。
155 :
デフォルトの名無しさん :05/02/14 12:42:22
Excel2000のVBAでjavascriptで書かれているwebをセルにコピーするコードを書きました。 そのページのソースには.jpgリンクがJavascript:DoLink("〇△□") と書かれているのですが、このリンクを開いて保存するにはどうしたらいいか教えてください。
156 :
デフォルトの名無しさん :05/02/15 05:48:54
sheet1からsheet10まであって、sheet1!A1に例えば「sheet2]と入力してコマンドボタンをクリックすると、 sheet2!A1にジャンプするようにしたいのですが、どんなコードを書けばいいでしょうか?
Application.Goto Sheets(ActiveSheet.Range("A1").Value).Range("A1")
159 :
デフォルトの名無しさん :05/02/16 09:53:34
「!」(ビックリ)と「.」(ドット)ってどう違うんですか?
object.method form!field
object.property record!field
ビックリ、、、 ドット、、、 ステキな呼び方ですねw
あるブックを開くのをイベントとして、 特定のブックが存在するかどうかをチェックし、 なければ新たに作成し、その特定のブックのsheet1に名前を付ける という記述をしようとしました。 Private Sub Workbook_Open() Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") If Not (FSO.FileExists("D:\特定.xls")) then Workbooks.Add ActiveWorkbook.SaveAs FileName:="D:\特定.xls" ActiveWorkbook.Worksheets(1).Name = "名前" End If End Sub これを実行してみると、新しい「特定.xls」は出来上がるのですが、 シートに名前がついてくれません。 何がまずいのでしょうか?
165 :
デフォルトの名無しさん :05/02/17 12:20:48
>>164 Excel2000でやってみたらうまくいったよ。
166 :
159 :05/02/18 09:48:42
何秒間か待機するって、何かいい方法ありませんか? for i=1 to 1000000 : next iだと秒数指定できないし。 GetTickCount使うんですかね。カウントが0に戻らないことを祈りつつ。
168 :
デフォルトの名無しさん :05/02/19 19:30:29
>>167 javaなら
Thread.sleep(ミリ秒数);
でいいんだけどね。
Application.Wait Now() + TimeValue("00:00:05") MsgBox "5秒間待ってから実行します"
便乗質問なんだが、VBAの Application.OnTimeか Application.Waitみたいな感じで 時間を_秒で指定する方法は無いんでしょうか?
次はそうくるかと思ったが、VBAじゃミリ秒単位の指定はない。
フォームのイベントで CommandButtonを押したら、TextBoxのカーソル位置に "hoge"を挿入ってのはどうやればいいのかな? .Value="hoge"じゃ、いままで入力されてたものが消えてしまうし .Value=.Value&"hoge"とかやっても、カーソル位置への挿入は出来ないし・・・ どなたかお教え願います
「カーソル位置への挿入」ってどういうこと?
>174 [foo|piyo ] ↓ [foohogepiyo ] ってな感じ。( | がカーソル位置) CommandButton押した時点でTextBoxからフォーカスが外れるから 無理かなとも思ったけど、どこかでこういう動作するフォームを使った覚えがあるし。 一体あれはどうやってたんだろう?
Dim mylen As Integer Dim mystart As Integer Dim buf1 As String Dim buf2 As String mystart = TextBox1.SelStart mylen = Len(TextBox1.Value) buf1 = Left(TextBox1.Value, mystart) buf2 = Right(TextBox1.Value, mylen - mystart) TextBox1.Value = buf1 & "hoge" & buf2 こんなんで如何? あと質問するときは○○な理由でうまくいかないって説明するよりも、自分が望んでいる ことを最初に説明しちゃったほうが回答しやすいと思うよ。
>>176 いいかんじです、ありがとうございました。
今度質問するときは忠告の件気を付けます。
最初にアクセスだと書いておくべきだった。wait使えない…。 エクセル用ですね。でも、ひとつ勉強になりました。感謝。 API関数で何とかします。
179 :
デフォルトの名無しさん :05/02/21 10:11:32
javaから移ったんですが、 プロパティも引数とるんですねぇ。 プロパティ()みたいに。
180 :
デフォルトの名無しさん :05/02/21 11:45:52
あと「コレクション」というのも一種の「オブジェクト」なのですかねぇ。 「item」という「プロパティ」があるし。 javaで言うところのVectorクラスのインスタンスみたいなものなのかな?
あふぉ?
182 :
デフォルトの名無しさん :05/02/21 12:53:04
こりゃ相当な あふぉ だね。
184 :
デフォルトの名無しさん :05/02/21 14:32:12
そんなこと言わないで教えてよ
やーいあふぉー
186 :
デフォルトの名無しさん :05/02/21 17:16:00
ちぇっもうおまいらになんか聞かないよ。 ばーか
ユーザーフォームに何か入力をしたあとエクセルを閉じて また開いた時にさっき入力した値がすでに入力されているようにするにはどうしたらいいんでしょうか。
シートに値を保存しておくのが手っ取り早いのでわ?
宣言セクションで宣言した変数に値を格納しておいて ユーザーフォームを開いた時にそれをテキストボックスに代入するようにしておくとか。 まあStatic変数でもいいけど。
>>188 さん
>>189 さん
お答えいただいてありがとうございます。
なんとかできそうだと思います。
189さんの方法ってエクセルを閉じた後、再度開いても保存した値を取り出すことができるの? だとしたら詳しく教えてほしい。
ゴメン、フォーム閉じた場合じゃなくてExcel閉じた場合は無理だ。 一応VBAのみで変数の値を保持する方法もあるけど、超面倒なので割愛する。
俺もシートに値を保存するって方法をよくとるんだけど、なんかスマートじゃないような 気がしてね。これが最善の方法なのかなぁ?
値保持用に不可視シート作るとか
ini ファイルだろ ブック本体を上書きしてしまうなどオレには考えられん
漏れも、ややこしい配列を呼び出して一時的に保管する時に 不可視シートをやむなく使うなァ 不揮発性の二次元配列なんかあると便利なんだが
ブックと一緒にiniファイルを保管せにゃならん。 メンドクサ。
iniだけはダメだよ。 あれは素人のやること。
ATLでDLL作ってそっちに保存
>>199 ネタだよね。
まさか今時そんなダサいことやってる奴が居るわけないよな。
201 :
デフォルトの名無しさん :05/02/23 11:57:18
EXCEL2000の[セルの書式設定]-[表示形式タブ] の数値に[小数点以下の桁数]っていうテキストボックスの中にスピンボタンが 入っているコントロールがあるんだけど、これはなんというコントロールですか。 VBAにはないですか?
203 :
デフォルトの名無しさん :05/02/23 14:39:58
マジです。
>>201 あれは、EDTBX(エディットボックス)といいます。
VBAには、ありません。
スピンボタン と テキストボックス を組み合わせて、同じような昨日を実装してください。
205 :
201 :05/02/23 18:42:42
そうなんですか。ありがとうございました。
EDTBX
excelで,single型に宣言した配列変数に,セルの値(小数)を入れたいのですが, ↓で失敗.正しくはどうやるのか教えてください dim dat() as single dat(i)=cells(x,y).value
datは可変配列なのに、redimしてない
209です.
ごめんなさい.間違えました.
↓で失敗しました.要素数は指定していました.
dim dat(a) as single
dat(i)=cells(x,y).value
>>210 ,211
ご指摘ありがとうございます.
エラーメッセージでなんと出るかくらい書いたら? まさか変数iが定義されていないってオチはないよね。 小出しにしないでコード全てコピペすれ。 問題を解決したいのであれば。
dim dat() as single ... 他の処理 ... redim dat(a) as single dat(i)=cells(x,y).value
それで原因がわかるかよ。 他所でやれ
>>214 > 小出しにしないでコード全てコピペすれ。
> 問題を解決したいのであれば。
コードに
> ...
> 他の処理
> ...
こんな行が本当に含まれるならエラーが出るのは当然だが。
217 :
デフォルトの名無しさん :05/02/24 19:53:57
VBAで作ったPGって誰でもコード書き換えたりできますよね? これってプロテクトみたいなのかけられないのでしょうか?
普通にパスワード掛けてロックすればいいんじゃないの? まぁ、実はこの方法ではイベントプロシージャは丸見えなんだけどね。 そこはイベントプロシージャ上にコード書かなければいいだけだし。
219 :
デフォルトの名無しさん :05/02/24 23:19:25
VBAで文字を動かしたりできませんか こう、スクロールしたりとか
dim aho as string dim i as integer aho = "あほばかまぬけ" for i = 1 to len(aho) print mid(aho, i) next i
221 :
デフォルトの名無しさん :05/02/26 14:47:33
最上位のApplicationオブジェクトについて質問です。 このオブジェクトを使うときに Dim app As Application Set app = ActiveWindow.Application とかやって appオブジェクトにプロパティやらメソッドやらをつけてやらなくてもいいのはなぜですか? みんなクラス名をそのまま使って Application.Worksbooks("Book1.xls")........ とかやってる。 インスタンスを作らなくていいんですか?
>>221 言語仕様上許されているから、としか言いようがない。
インスタンスを作ってプロパティ経由でメンバにアクセスするように
したらバグを減らせる可能性が高いけどね。
そういう概念を知らない人、知ってても使わない人、色々
居るのでしょう。
GetOpenFilenameとかで特定ののディレクトリを指定して開きたい場合くらいしか きちんと宣言したりしないな。
224 :
デフォルトの名無しさん :05/02/26 21:43:18
ApplicationクラスのそれらのメソッドやらプロパティはShared宣言されているから と言ってみるテスト
独学でVBAしか勉強した事ないんで いつも感覚的にコード書いてるんだけど なんか、そういうVBAの構造とか概念の書いてあるいい本ってあります?
すいません。質問させてください。 一つのセル内で改行されているセルを二つのセルに分割したいのですが。 セルA1の値が "みかん リンゴ" というようにスペースなどで分割されている場合は下記のように splitを使ってB1、C1に振り分けることが出来たのですが、 Sub test() Dim A() As String A = Split(Cells(1, 1).Value, " ", 2) Cells(1, 2).Value = A(0) Cells(1, 3).Value = A(1) End Sub 一つのセル内で みかん リンゴ というように改行されている場合にどのように分割すればいいのか分かりません。 どなたか教えてください。よろしくお願いします。
229 :
デフォルトの名無しさん :05/02/27 14:35:09
>>225 それがなかなか見当たらないよねぇ。
microsoft社のヘルプにさえよく書かれていない。
vbaに関する本で、オブジェクトやらメソッドやらプロパティやらが詳しく載っている本を参考にするとかなさそうだね。
ところで、
>>221 の答えは
>>224 でいいのかな?
>>225 VBのサブセットなんだから、例えばVB6の入門書を読めばいいんじゃないの。
言語仕様が解説してあるようなやつ。
229の云うようなプロパティ辞典的なものも併せて読んでくとか。
初めまして。質問なのですが ExcelのデータをAccessに取り込みたいのですが どうすればいいのでしょうか? AccessにあらかじめExcelから抜き出したい列をテーブルとして 作成しておいて、そこにExcelからのデータを落とし込みたいのです。 最終的にはExcelファイルを指定してそのデータをAccessに落とし込みたいのですが・・・ 何か参考になるサンプルコードやサイトがあれば教えてください。 よろしくお願いします。
まずはDAO、ADOでググる。
>233に追加して TransferSpreadsheetもググる事をお勧めする。
TransferSpreadsheetってAccessのインストールするときに カスタムにしてコンポーネント入れとかないといけないんだよね。 配布したときにお客さんがそれ忘れてるとかなり困ったことになる。
あれから色々調べて、何とか指定したエクセルデータをテーブルに 格納することに成功しました。ありがとうございます。 そこでまた質問なのですが 指定フォルダ直下にあるエクセルファイルを全て読み込んで テーブルに格納したいのです。例えばCドライブ直下に エクセルファイルが3個あったとしたらそれを全て順番に 読み込んでテーブルに格納したいのです。(エクセルファイルの 書式や列数は全て同じです)フォルダを指定するダイアログを 表示することはできていてそれを使いフルパスを取得することも出来ます。 しかし、この後どうすればいいのか分からないのです。 どうかご教授よろしくお願いします。
238 :
デフォルトの名無しさん :05/03/01 22:42:48
「ムケてない香具師」の典型的パターンだな
今日、色々と試行錯誤しまして、フォルダを指定後、 直下にあるExcelファイルを全てAccessのテーブルに格納する事に 成功しました。自分で適当に作った簡単なExcelファイルなら 格納できるのですが、マクロの入っている(正しい表現ですか?)Excel ファイルだと格納できないのです。Access側のVBAでマクロの入った Excelファイルをテーブルに格納することって出来るのですか? よろしくお願いします。
「〜ですか? よろしくお願いします。」 と言う使い方は日本語的におかしいと思うのは俺だけですか? よろしくお願いします。
ExcelのマクロをAccessに取り込みたいの?
>>241 いえ・・・Excelのデータを取り込みたいのです。つまり
ExcelのデータがそのままAccessのテーブルに入るように
したい(もちろんAccessの方では事前にテーブルを用意しておいて)です。
でも実行しようとすると
マクロが有効になっているとか何とか(よく覚えてなくて・・・スイマセン)
出て、その後エラーナンバー13「型が一致しません」と出ます。
Accessのテーブルは試験的な段階なので全部テキスト型にしてあるし
Excelの方もマクロが使ってある以外はこれといって普通の文字列データに
見えます。原因が全く分からないので、どなたかご存知の方
ご教授ください。よろしくお願いします。
エクセルのセキュリティの設定でマクロ開くときのチェックをはずしておけ
244 :
デフォルトの名無しさん :05/03/04 11:39:05
URLのリンク先が存在するかチェックしたいのですが、 ご存知の方がおられましたら、 よろしくお願いします。
ん? サーバーが実在するかどうかってこと? それとも 404 が戻ってくるかどうかを見るってこと? 存在してもたまたまそのとき落ちてたら存在しないって判定したいの?
246 :
デフォルトの名無しさん :05/03/06 17:07:43
Private Sub UserForm_Initialize() Load UserForm2 With UserForm2 .StartUpPosition = 0 .Top = 50 .Left = 10 .Show End With End Sub 名前が不適切というエラーが出ちゃいます。 フォームに何かしなければいけないのでしょうか?
早速ですが、今更と思われそうですがエクセル95のVBAで FSO(File System Object)は、使えますか? 自宅には当然95なんてシロモノは無いので、確認がとれません 会社でぶっつけ本番でもいいのすが不安で・・ ところで、アクセス95ってDAOくらいはぶん回せるのかしら・・・ 不安不安不安・
247ですが、間違えました。アクセス95のVBAでFSOでした
>会社でぶっつけ本番でもいいのすが不安で・・ よくないと思うが・・・。 今後色々と大変だと思うけど、ま、頑張ってね。
250 :
デフォルトの名無しさん :05/03/07 00:43:55
Excel97でMicrosoft Forms 2.0 Object LibraryのDataObjectに レイトバインディングしたいと思ってます。 CreateObject("???")の ???の部分はなんて設定したらいいの? ググってもわからんかったよ。すまん。 教えてエロいひと!!
251 :
デフォルトの名無しさん :05/03/07 01:30:51
アクセス95でAccess Basicに取って代わり VBA2.2に。
VB4.0との統一もそれと同時でDAOのバージョンは3.0で
回せるのではないでしょうか。
95で足りている環境ならブッツケ本番でも充分対応できる筈。
気楽にやってみてはいかがでしょうね
>>247
ありがとうございます。でもそんな大それたモン 使う価値あんのかしら・・なんて
253 :
sage :05/03/07 01:39:43
時間の無駄かもよ。金儲けだからしょーねーじゃん?
ところで、喪前らエクセルのVBAで金儲けしてるの?
格好つけてVTFO使うよりVBA。 VTFO資料無さ杉。
256 :
デフォルトの名無しさん :05/03/08 22:46:36
EXCEL2000で、セルを指定してCSVに書き出す方法はありますか?
>>256 > 方法はありますか?
あります。
というかうちの個人用マクロブックに
「選択範囲をCSV形式で出力」ってのがある。
258 :
デフォルトの名無しさん :05/03/08 23:38:36
>>257 ありがとうございます。
確認してみますね。
261 :
デフォルトの名無しさん :05/03/15 22:46:23
条件付き書式について教えてください。 フォームのテキストボックスに入れた日付の値が、 土日と、「休日」という国民の祝日の一覧を入れた範囲の値と同じものだと背景が赤文字になるようにしたいのです。 =OR(WEEKDAY($A1,3)>=5,COUNTIF($K$1:$M$16,$A1)+COUNTIF(休日,$A1) セルの条件付き書式では上の記載でいけたのですが、VBAだとどう書けばいいでしょう。 そのままぶっこんでも当然動かないし…
>>261 条件付き書式自体が適用されないなら、
マクロの記録でも使って勉強しろ。
条件付き書式は適用されてるが、思い通りの結果を返さないなら、
VBAで条件付き書式を設定したセルの書式条件式がどうなってるか調べろ。
おそらくセル位置の指定方法を間違ってるんだと思うけど。
263 :
デフォルトの名無しさん :05/03/16 23:23:28
ある資格試験の勉強をしてるんですけど覚える事が沢山あって大変で エクセルやワードなんかで表を作ったりしてそれをプリントアウトして勉強 してるんですが一々面倒くさくなってしまったのでいっそのことVBAで問題 作ってしまおうと考えて、いまVBAの勉強を始めてます。一枚のシートで Aセルに問題、Bセルに答えと言うようにしてテキストボックスにキチンと 漢字も間違わずに正確に語句を書けば正解と言うようにしてシートに自分 で幾らでも問題を追加して作れるようにしたいんですがこういう事はVBAで 可能ですよね?
意味がわからん。
>>263 わざわざVBA使わないでも、
A1に問題、B1に答えを記入する欄、C1に"=If(B1=C1,"正解!","残念!")"、D1に解答として、
D列を非表示にすれば良いだけなのでは?
>>265 有難うございます。その式を基本にして何とか作れそうです。
267 :
デフォルトの名無しさん :2005/03/28(月) 13:13:39
Access2000を使っている者です。 Accessのマクロを、VBAプログラムから生成することってできるんでしょうか? 逆のこと(マクロをVBAに変換)はできるのですが・・・ ご存知の方おられましたらよろしくおながいします。
Accessのマクロ = VBA
269 :
デフォルトの名無しさん :2005/03/28(月) 13:31:28
>>268 では正確にいえば「マクロオブジェクト」すなわち「データベースウィンドウ」の「マクロ」欄に一覧表示されるべきオブジェクトをVBAスクリプトから作りたい。といったらよいですか。
「Accessのマクロ = VBA 」そんな既知のことはあえて聞かない。
270 :
デフォルトの名無しさん :2005/03/28(月) 13:36:41
テスト
うゎ、こいつマクロの概念からして解ってないのかよ・・・
272 :
デフォルトの名無しさん :2005/03/28(月) 17:42:53
質問です。 ACCESSのVBAで、自分自信(MDB)が存在するフォルダまでのパスを取得する方法は無いでしょうか。 かなり探したのですがカレントディレクトリを取得する方法くらいしかみつかりませんでした。 配布して使いたいので、利用者がどのドライブのどのフォルダに設置するかわからないので、なんとか実現したいのですが。 よろしくお願いします。
Sub hoge() MsgBox ThisWorkbook.Path & "\" & ThisWorkbook.Name End Sub Excelだとこんな感じでフルパス取得出来るけど。(フォルダまででいいなら& "\" & .Nameは不要 使ってないからよくわからんがACCESSも同じような方法あるんじゃないの?
276 :
デフォルトの名無しさん :2005/03/29(火) 08:02:12
>>267 はVBAをマクロ化したいのではなく、
VBAで「マクロオブジェクト」を作りたいのだと思う。
保守性が下がるだけだと思うけど・・・
テキストボックスにフォーカスされた状態で一定のキーボードからの入力を 受け付けないようにするにはどう書けばいいのでしょうか?
> 一定のキーボードからの入力を受け付けない とはどういうことですか? 日本語で説明してください。
>>278 KeyPressのときに
if KeyAscii = ○○ then
KeyAscii=0
end if
にすればいいと思う。
○○はキーボードからの入力を受け付けたくないキーの
KeyAcsiiコードで。
と俺は思った。
"一定"じゃなくて"特定"か??
そうでう、特定でした! ありがとう!
283 :
デフォルトの名無しさん :皇紀2665/04/01(金) 10:12:59
複数のコントロールのプロパティを一度に変更するにはどうすればいいのでしょうか?
>>283 コントロールのオブジェクト名を「固定名&連番」にして
For〜NextとControls()を使って処理。
あとはヘルプ参照。
with では無理ですかね?
「コントロールの複数のプロパティ」ならwithだけど
「複数のコントロールのプロパティ」なら
>>284 だな
質問です。 エクセルでキー入力してDBからデータを取ってきて表示させたいんすけど、 2つのテーブルの値を交互に表示するにはどの様にすればよろしいですか? エクセル2000です。よろしくお願いします
289 :
デフォルトの名無しさん :2005/04/07(木) 03:15:16
マクロを実行して Sheets("Pos").Visible = True の行までくると 「実行時エラー'1004': Worksheet クラスの Visible プロパティを設定できません。」 のメッセージが表示されます。Excel2000です。 どうしたら良いのでしょうか。
290 :
289 :2005/04/07(木) 04:16:58
[オートコンプリートを使用する] チェック ボックスはオフに設定しています。
292 :
デフォルトの名無しさん :2005/04/12(火) 12:15:54
>>276 Exactly! フォロー感謝します。
当然のことながら逆のこと(VBAコードを書いてマクロとして実行させる)はできますし、「マクロとは何か」なんてことは知っています。
業務上、急ぎでそれをする必要があったので、詳しく説明できなかったのが悪かったと思います。
自分個人なら「マクロオブジェクトをプログラムから作る」必然性はないのですが、業務上、「デザインビューで、何が行われているのか視覚的にわかる必要がある=マクロオブジェクト」を作らなければならないのです。
内容は、「連番のついたクエリを順に実行する」というマクロで、手作業でマクロオブジェクトをデザインビューで作ると、けっこう面倒です。
(「クエリを開く」→クエリ01,02,…を繰り返すことになる)。VBAコードで、コピペできれば楽ですが・・・
ご存知の方も多いでしょうが、業界、理にかなわないものを作れという仕様もけっこうあるので。
今回の場合は「動作を視覚的にわかりやすく見たい」という要求のもとでやってます。
(ようするに利用者がvbaコードを読めないか、読む手間を省きたいらしい)
禿しくワロタ
294 :
デフォルトの名無しさん :2005/04/12(火) 15:50:33
テキストエリアを持つシェイプがグループ化されているとき、 Shapes("hoge").GroupItems(添字).TextFrame.Characters.Text の値を取得できても、変更できません。 グループ化を解除せずに、変更する方法はありませんか?
Excel2003でコントロールボタンを配置し、それを押すとフォームが出て フォーム中のキャンセルを押すとフォームが消えるって作ったのですが コントロールボタンを押した時のコードで UserForm.Show ってやるだけで表示されてしまいます しかし、キャンセルを押された時には Unload UserForm としているので、コントロールを押された時は Load UserForm UserForm.Show とすべきなのでしょうか? それともShowメソッドが呼ばれた時点でメモリにロードされていなければロードする なんて内部処理があるのでしょうか? それとも考えが間違っているのでしょうか?
> それともShowメソッドが呼ばれた時点でメモリにロードされていなければロードする > なんて内部処理があるのでしょうか? あります。
297 :
デフォルトの名無しさん :2005/04/13(水) 15:29:04
じゃあ教えてやれよ。
298 :
デフォルトの名無しさん :2005/04/13(水) 20:41:12
何を?
この場合は「あります。」のみの回答でじゅうぶんだと思うんだが。
おいらもCreateとかしないので、 どのタイミングでフォームが作られるのかわからなかったんだけど 本読んだらUserForm.Showでもいいし UserForm.Label1.Caption="あああ"でもいいけど 最初に使おうとしたときに勝手に作ってくれるらしい。
VBAに限ったことじゃないけど、よく使われる変数名ってあるじゃないですか。 i〜nはFORTRANの名残で整数型によく使われたり hoge、hugaなんかは特に意味のないものとして使われたり。 そういうのが多く紹介されてるサイトって無いですかね? 又は、詳しい方が居るならここに羅列していただければありがたいのですが。
エクセル2000、2002にて エクセル本体やブックの KeyDown イベントを拾う方法はあるのでしょうか? 只今、アドインを作成しています。 このアドインはキーボードで操作するもので、 受け付けるキー入力として Esc キー押下があります。 但し、アドイン毎にその動作は異なります。 (続く)
303 :
302 :2005/04/14(木) 15:04:10
Esc を押された時に各アドインでは リセット処理を走らせたいのですが、 Application.OnKey を使うと、 1つのキーに1つのルーチンしか割り当てられません。 割り当て先のルーチンで各アドインの処理を 直接呼ぶことも出来ますが、これではアドインを追加するたびに OnKey で呼ばれるルーチンに手を入れる必要があります。 そこで、各アドイン側で WithEvents 宣言したオブジェクトを経由して KeyDown イベントを受け取れないものかと考えていますが うまくいきません。 (続く)
304 :
302 :2005/04/14(木) 15:04:43
現在は仕方なく、OnKey で呼ばれるルーチンを含む アドイン(KeyHookアドイン)を別個に1つ作成し 各アドインは KeyHook に自分のイベントハンドラとなる Public プロシージャを登録し、 キー押下時に KeyHook から Application.Run で 各アドインのイベントハンドラを順に呼び出そうと しています。 ですが、どちらにしても他人が作ったアドインと OnKey の 取り合いになることも避けたいので OnKey 以外でキー押下を検出する方法を 探しております。 どなたかお知恵を拝借できましたら幸いです。 またスレ違いでしたら失礼しました。 もし、適切なスレがありましたら 恐れ入りますが誘導してください。
305 :
302 :2005/04/14(木) 15:15:09
すみません。何のアドインだか書いていませんでした。 エクセルのアドインです。
たまにお世話になっております。今回初投稿します。 ACCESS2000&WinXPにて、APを作成しています。 APの内容は ユーザー側画面にて、予約を行いリアルタイムで 事務所側画面に結果を反映させようとしています。 DBは事務所側のサーバに置いてあります。 この時、急にユーザー側画面のレスポンスが悪くなることで困っています。 ユーザー側画面ではなにもロジックを入れておらず、 入っているロジックは数分に一度のDB更新処理のみです。 レコードロック?とも思いましたが、レコードへのアクセスは数分に一度ですので、 関係ないのではと思います。 MDBも分割しております。 レスポンスが悪くなる理由として、 レコードロック以外に考えられるものはありますか?
>>302 ぱっと思いつくのは SetWindowsHookEx(WH_KEYBOARD, 〜) なんだけど
VBAでやると PC 激重になると思うし、アドイン作ったこと無いから
実際出来るかビミョ
>>306 どのコードで、遅くなるの?
まずは、その部分の、解析汁!
308 :
302 :2005/04/15(金) 15:33:27
>>307 レスありがとうです。
最終的にはそれしかないかな、と思っているのですが
その前に実は API 使わずいけるのでは!?と思い書き込ませていただきました。
ひとまず、
>>304 の KeyHook アドインで何とかなりましたが
やっぱり他のアドインとの OnKey 取り合いは避けられないし
API でフックするしかないかなぁ…。
API フックは昔、一度やっただけなので思い出しながら作ってみて
できたら体感速度とかレポします。
309 :
デフォルトの名無しさん :2005/04/15(金) 18:03:04
Application.ScreenUpdatingをfalseにしたいのですが 変更できません、イミディエイトウィンドウから Application.ScreenUpdating=False のように打ち込んだ直後に print Application.ScreenUpdating True となります。 プログラム文中にかいても同じですが、何故変更できないのでしょうか? 新規にブックを開いてこういう状態です。
310 :
デフォルトの名無しさん :2005/04/15(金) 18:33:06
エクセルの分析ツールにあるワークシート関数ERFをVBAのマクロで使う方法はありますか?
>>309 Sub Hoge()
Application.ScreenUpdating = False
Debug.Print Application.ScreenUpdating
End Sub
これで、実行しても True って表示されるの?
ちなみに、 ScreenUpdating は VBA 実行中じゃないと False に設定出来ません。
(というか、Excel が True に戻す)
教えてください。 文章末尾に到達したことを知るにはどうすればいいのでしょう? ワードでマクロを使って文章内の特定の単語に色をつけています。 とりあえず、単語ごとに50000回くるくる回しているのですが、 時間がかかってしまいます。 文章末尾に到達したことがわかれば、そのループを終えて、次のループに 移ることができると思うのです。
>>312 For Eachで回せばいいんじゃない?
314 :
デフォルトの名無しさん :2005/04/18(月) 18:14:27
VBAでIEの制御をこころみているんですが、HTML本文全体を取得するには、 どうしたらいいのでしょうか? CreateObjectで取得したオブジェクトが変数IEに入っているとして、メソッド navigateでページを表示できた状態で、そのページ全体のHTML文を取得する どうすればいいのですか。 多分、 IE.Document.body の後ろに適当なプロパティを指定すればよさそうにおもうのですが、それがわかりません。 フォームのタグ類の制御はできているのに、こんな簡単そうなことでもう数時間 はまってますorz また、IEのオブジェクトの階層構造、メソッド、プロパティを分かりやすくまとめた サイトがあったら教えて下さい。MSDNは見たけど、必要な情報にたどり着けません でした。
Sub test()
Const URL = "
http://www.yahoo.co.jp/ " 'ここに取得したいHPを記入
Dim objHTTP As Object, sHTTP As String
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
Call objHTTP.Open("GET", URL, False)
objHTTP.Send
sHTTP = objHTTP.ResponseText
Debug.Print sHTTP
End Sub
「VB MSXML」で調べると分かりやすかも・・・
Word(2000) VBAでファイルのプロパティってどのように変更するのでしょうか? キーボードマクロでは記録されなくて・・・ よろしくお願いします。
317 :
314 :2005/04/18(月) 21:35:46
>>315 早速のご丁寧なご教示ありがとうございます。
これはHTML(XML)を本格的にパースする用途に使うと便利そうですが、私の場合、VBA
でフォームに自動で応答するために、たとえば単に、
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate "
http://hogehogehoge.co.jp "
Set input_list = objIE.document.all.tags("input")
For Each i In input_list
If i.Name = "cd" Then
i.Value = code
End If
If i.Name = "btn1" Then
i.Click
Exit For
End If
Next
なんてことをしているだけでして、その過程で、単にタグデータではない普通のテキスト
部分を読みたいだけなのですが、上記のようなオブジェクト(objIE)を使ってテキスト
部分を簡単に読むにはどうしたらよいのでしょうか?
318 :
314 :2005/04/18(月) 22:21:31
自力解決しました。 objIE.document.body.innerHTML でHTMLを取得できました。 315さんはじめ、皆さん、お騒がせしました。
319 :
302 :2005/04/21(木) 14:08:52
>>307 さん、レスありがとうでした。
しかし SetWindowsHookEx() の件は、
自分が勝手に勘違いしている部分があったようで
実際には使えなさげな気がしてきました。
(フックしても、それをアドイン側へ通知する手段が無い?)
う〜ん…何とか OnKey 以外の方法
(他所のアドインとキーを取り合わない方法)
でキー押下を検知する方法はないかなぁ…。
320 :
デフォルトの名無しさん :2005/04/21(木) 16:53:07
すみませんが教えてください。 行方向に例えば、A1〜A100まで連番をつけ、 A100まで到達したら、B1に移り、B100まで連番を振る、 この場合はA100の値とB1の値は+1の増加です。 といった記述式が思い浮かびません。 どうしたらよいのでしょうか?
>>320 Dim i As Byte, j As Long, n As Long
Application.ScreenUpdating = False
n = 1 '開始番号
For i = 1 To 2
For j = 1 To 100
Cells(j, i).Value = n
n = n + 1
Next j
Next i
Application.ScreenUpdating = True
>>320 は
>>321 程度のことが思い浮かばんということなのだろうか?
ちなみにこうや
For i = 1 To 2
For j = 1 To 100
Cells(j, i) = j + 100 * (i - 1)
Next
Next
こうもできる
For i = 1 To 200
Cells(((i - 1) Mod 100) + 1, (i - 1) \ 100 + 1) = i
Next
数式というなら =ROW()+(COLUMN()-1)*100
>>322 連番というだけで、開始番号が1だとは言ってないことに気づけ。
まあ、どんな値でもその式に当てはめられるけどそこまでするメリットはほとんど無い。
かなり邪道だが、For Eachを使う方法もあるな。
325 :
デフォルトの名無しさん :2005/04/21(木) 18:06:19
みんな質問に答えてくださってありがとう。 これで長年の疑問が解けました。
Dim x As Range, y As Range, i As Long Set y = Range("A1:B100") i = 1 '初期値 For Each x In y If x.Column = 1 Then x.Value = i i = i + 1 ElseIf x.Column = 2 Then x.Value = x.Offset(, -1).Value + 100 End If Next For Eachだとこんな感じかな?開始から終了までの行数を 加えればいいので、もっと一般化できますね・・・
>>320 すみませんアンカー抜けて、しかも半角シフト
全て詰められてしまいました…一応再度報告、、、
Dim x As Range, y As Range, i As Long
Set y = Range("A1:B100")
i = 1 '初期値
For Each x In y
If x.Column = 1 Then
x.Value = i
i = i + 1
ElseIf x.Column = 2 Then
x.Value = x.Offset(, -1).Value + 100
End If
Next
328 :
320 :2005/04/21(木) 18:24:29
ちなみに、下記のように書いた場合、 Dim i As Integer Dim j As Integer Dim n As Integer n = 1 For i = 1 To 10 For j = 1 To 10 Cells(i, j).Value = n n = n + 1 Next Next 行方向に1ずつ増加せずに、列方向に1ずつ増加してしまったのです・・・ どこがいけなかったのでしょうか?
>>327 Dim x As Range, i As Long
i = 1 '初期値
For Each x In Range(Cells(1, 1), Cells(2, 100))
Cells(x.Column, x.Row).Value = i
i = i + 1
Next x
範囲と行・列の両方を反転させればいいだけ。
これもx.Columnとx.Rowを計算に掛ければ変数 i は無しでも行ける。
範囲を数値指定ではなく文字指定にすると反転させるのが面倒かもしれないけど
Cellsで始点と終点を指定する方法なら反転も簡単。
指定範囲と作業範囲が異なるという邪道な方法ではあるけど、それが理解できてれば問題ないし。
>>328 Cellsの i と j が逆。
330 :
320 :2005/04/21(木) 18:40:10
>>329 レスありがとうございます。
For を2回使ったばあいには、最後のForから処理が始まるってことですかね・・・
>>329 凄い綺麗な形にまとまるんですね。
やっぱり知識よりも、こういう知恵というか発想力が
凄い人は素直に尊敬します。
少なくとも>332がただの馬鹿なのは間違いなさそうだ
>>332 いや別に嫌みじゃないんじゃない?
ところでFor Eachの使い方がよく分からん・・・
>>324 For Eachの方が若干高速だし、邪道何て事はないよ。むしろ本筋のような?
>>329 は面白いけど行数多いと困るね。
正統に書けば下記のような感じ。範囲について応用効くし。
i = 1 '初期値
objRange = Array(Range("a1:a100"), Range("b1:b100"))
For Each y In objRange
For Each x In y
x.Value = i
i = i + 1
Next x
Next y
>>327 おまけ
i = 1 '初期値
Set objRange = Range("a1:a100")
For Each x In objRange
x.Value = i
x.Offset(, 1).Value = i + objRange.Count
i = i + 1
Next
338 :
デフォルトの名無しさん :2005/04/21(木) 23:43:10
VBAが理解できると、VBも理解できるようになると言われますが 実際のところどうでしょう? やはり楽に以降できましたか?
>>337 さあ、早くマクロを自動記録する作業に戻るんだ。
>>335 は面白いけど列数多いと困るね。
正統な方法でもないし。
質問させてください。 Excelについてなのですが、今 「Workbook_BeforeClose」に「Thisworkbook.saved=True」「Application.DisplayAlerts」 と記述しています。 それで「×」ボタンをクリックしたら強制的にブックを閉じるようにしたいのですが ブック上にコントロール(たとえばチェックボックス)を配置してそれをいじると なぜか「×」をクリックしたときに変更内容を保存しますかというメッセージがでます。 どうやったらこれをでなくできるでしょうか。
すみません。「Application.DisplayAlerts=false」のまちがいです
>>340 それもそうだな。For Eachにとらわれたのは失敗だった。
普通に書くならループ不要の.DataSeriesが明らかに高速だった。
For Each使うなら.columns使えば良いが蛇足だな。
EXCEL以外のWORDやPOWERPOINTやVISIOのVBAの本でいいのない? ていうかほとんど全くないの?
>>346 サンキュ
それすごく欲しいけど品切れで無念・・・
すいません、VBScriptでユーザーのキー入力をフックしたいんですが そういうことは出来ますでしょうか? スレ違いすいません・・・VBScriptのスレがないんです・・・
>>342 うーん、うちのExcel2002ではチェックボックス触って×で閉じても
確認ダイアログ出なかったけど。。
>>350 あぁ!WSHか!ありがとうございました
352 :
デフォルトの名無しさん :2005/04/24(日) 22:18:12
すみません。 ExcelVBAで作ったグラフをPowerPointにそのまま吐き出すことはできるんでしょうか? 吐き出す、というか、VBAでグラフをExcelからPowerPointにコピー&ペースト?になるのかな。 ぐぐってみたんですが、キーワードが悪いのか参考になるサイトが見当たりませんでした。 ヒントや、参考になるサイトがあったら教えてください。
353 :
デフォルトの名無しさん :2005/04/25(月) 01:16:26
ひとつのセルに 2004/04 が入っていて、これを 2004 04 に分けてダイアログのテキストボックス2箇所に振り分けたいのですが、 テキストボックス2箇所に振り分ける方法が分かりません。 助けてください。
>>353 Dim i As Integer
Dim A As String, B As String
Const C = "2004/04"
i = InStr(C, "/")
A = Mid(C, 1, i - 1)
B = Mid(C, i + 1)
>>354 さん
いやはやたったこれだけの行数が理解できてないっす。
1週間程度の知識なのでまだまだっす。
教えていただいた情報を元に勉強してくるっす。
ありがとうございました。
>>355 >>354 のはAとBに分割した値が入るけど
Dim A As Variant
A = Split("2004/04", "/")
とすればA(0)とA(1)に分割した値が入る
単純分割ならこっちがオススメ
Split関数が使えるのはExcel2000以上。そこんとこ注意
まあ、Splitが使える環境なら迷うまでもなくSplitを使うべき操作だけどね。
359 :
デフォルトの名無しさん :2005/04/25(月) 15:36:52
マクロでwordの文書上の右クリックメニューに新しくメニューを追加する方法を教えてください。 よろしくお願いします。
>>356 さん
自分のファイルで思い描いた動作をしてくれましたよーっ
助かりました。
ありがとうございました。
ただ、
>>357 さんが言っていることを他のサイトでも読んだので、
>>354 さんのも使えるように勉強するとです。
自分の行っている会社も97、2000、XP、2003とバラバラにあるので、
対応できるようにしたいと思います。がんばる。
361 :
デフォルトの名無しさん :2005/04/27(水) 08:14:23
ユーザーフォームを×ボタンで閉じた時に、エクセル自体を終了する方法はありますか?
あります
IE上でExcel開いた時に動かない命令って何ですか? Display.AlartとQuitはMSNで確認しました。 教えてくださいませ
どなたか助けてください。 たとえば 種類種類コード個数 りんご120 ばなな330 メロン25 イチゴ250 すいか13 というシートから コード別に他のシートに移すマクロを 組みたいんですが、filter関数を使えばいいという ことはわかったんですが、そのあとどうしたらいいのか よくわかりません。 どんなコードを書いたらいいのでしょうか? vba使ったことないのに先輩にいきなりいわれて困り経ててます。 どうかおねがいします
すみません 表がずれました。 種類 種類コード 個数 りんご 1 20 ばなな 3 30 メロン 2 5 イチゴ 2 50 すいか 1 3 使用しているのはexcel2000です。おねがいします。
>>365 Filterなんて使わなくても
For i = 2 To Cells(65536, 2).End(xlUp).Row
とかで、
Worksheets("種類コード" & Cells(i, 2).Value)…
とか
Select Case Cells(i, 2).Value
Case 1:
End Select
とかで振り分ければいいだけでしょ。
というかVBAわからないなら、種類コードの列でソートするなり
オートフィルタ使うなりして手動でコピペしなよ。
ここはVBAが全くわからない人がコードをねだるスレじゃなくて
VBAを有る程度わかってる人がヒントを貰うスレだから。
>>367 回答ありがとうございます。
ご指摘のとおりなんですが、この作業が毎日あって、実際にするのが
おばちゃんなんですよ。それで自動化するようにって指示でした。
>>363 さん
うおぉーっ、助かりますよーっ
ありがとうございます。
しっかり勉強するとです。
>>313 ありがとうございます。
一からやらないとだめみたいです。
372 :
デフォルトの名無しさん :2005/04/28(木) 05:19:32
VBAで16進数の扱いについて質問なんですが、 MsgBox 255 = "&HFF" If "&HFF" = 255 Then Select Case "&HFF" Case 255 End Select とした場合、Select Caseでのみ"偽"となります。 試しに Dim FF As Variant FF = "FF" として「"&HFF"」を「"&H" & FF」に置き換えると Select Caseでも"真"に成りますが、変数の型がStringだとやはり"偽"です。 MsgBoxとIfでは変数の型がVariantでもStringでも"真"に成ります。 ちなみに「Case 255」→「Case Is = 255」でも真偽の結果は変わりません。 またまた試しに Select Case 255 Case "&HFF" End Select としてみると何故か"真"になります。 もちろんSelect Caseの条件に、Byte型変数に一度格納した"&HFF"を当てたり ValやCByte等で変換した物を当てたりすれば"真"が返りますが、 "&HFF"という文字列と255という数値が一致するかという同じ条件の時に 何故Select Caseだけ真偽の結果が違うのでしょうか? また、何故条件と分岐結果を入れ替えると真偽が変わるのでしょうか? 詳しい方、理由を教えてください。
373 :
デフォルトの名無しさん :2005/04/29(金) 12:27:16
excelブックAからBにマクロを移したいのですが、 標準モジュールのリストを取得するにはどうすればよいですか。
VBエディタの画面からファイルのエクスポート→ファイルのインポート そういう話ではない?
VBAって勉強しておくと、転職の際有利でしょうか? 25歳、事務員です。
有利になることはある。 不利になることはない。 ただ、有利にならない場合もあるし どのくらい有利かは時と場合と職種と運による。 まあ、VBA使える奴なんて腐るほど居るし、 勘のいい奴なら数日で簡単なものは書けるようになっちゃうからね。 「Excel使えます」=「VBA使えます」みたいなものだし。 VBA覚えたからと言って、あまり期待しない方がいい。
377 :
デフォルトの名無しさん :2005/04/30(土) 15:20:52
検索結果を全てリストボックスに表示する方法を教えてください。 1行しか表示できない…
>>377 どういう検索の仕方をしてるのかわからないと何にも言えない。
とりあえず検索結果1件をリストボックスに表示するコードを
ここに貼って見ろ。修正してやるから。
>「Excel使えます」=「VBA使えます」みたいなものだし。 Excel VBAは使えるがExcel関数は素人。 俺はExcelが使えるとはおこがましくて言えない。
>>378 何とか自分でできました。
でも、ありがとう。心強かったよ。
381 :
デフォルトの名無しさん :2005/05/12(木) 22:18:52
「1000μSec」というような文字列を、数字と単位で分けたいのですが、どうしたらよいですか?
>>381 Sub Macro1()
Const 文字列 = "1000μSec"
Dim 数字, 単位
数字 = Val(文字列)
単位 = Mid(文字列, Len(数字) + 1)
MsgBox "数字は「" & 数字 & "」 単位は「" & 単位 & "」"
End Sub
383 :
デフォルトの名無しさん :2005/05/14(土) 20:33:11
今まで一つのモジュール内にすべてマクロを記述していたのですが、 プログラムが大きくなってきたので、下記のようにモジュール別に分けたいのですが、 実行すると、call文の直後「コンパイルエラー: SubまたはFunctionが定義されていません。」 が出てしまいます。 モジュールを分ける時にはどういうルールがあるのでしょうか? 今はただ「挿入」から「標準モジュール」を選んだだけです。 [Module1] Sub M1() call M2 : End Sub [Module2] Public Sub M2() : End Sub
>>383 エクセルのバージョンは?
俺は前の会社でexcel97で作ったときは
[Module2].〜として実行したけど、
他社でexcel2000で作ったときはそういうことせずに
単に
call 〜 でしてた。
それ以上のことは俺にも判らない。
>>384 バージョンは2002です。
単にcallでOKとのことで今もう一度確認したら、
Module1で宣言した変数を参照しようとしたことでエラーになって
たようです。見落としてました・・・。
どうもありがとうございました。
386 :
デフォルトの名無しさん :2005/05/20(金) 17:56:45
Access2000のVBAでTYPEステートメントを使ったのですが TYPEステートメントってネストする場合、同一名称の変数名って使えない のでしょうか? 例) Type aho aaa As String bbb As String ccc As String zzz As String End Type Type hogehoge mogemoge As aho zzz As String <---同一名だけど構造体のメンバとしては違う変数になると思うのだけど。 End Type 誰か教えて下さい。
387 :
デフォルトの名無しさん :2005/05/20(金) 18:15:36
すんまそん。 逝けますた。
388 :
デフォルトの名無しさん :2005/05/23(月) 14:43:29
一定時間毎にマクロを自動的に実行する処理をしたいのですが、 SetTimerを使用すればできるようなことを聞いたのですが、具体的な記述の仕方が分かりません。 どなたかSetTimerの設定方法をご存知ないですか?
Excelマクロについて質問なのですが、 1つのWorkbook内に別ファイルの関数ライブラリを参照できるのでしょうか? WorkbookObjectにコードを書き込み、 そこから別ファイルの共通関数ライブラリを参照したいのですが。 つまり複数のxlsファイルから、共通の外部プログラムを参照したいのです。
xxx.xlsというファイル名を変数として保管して、後からそのファイルを 変数を使ってアクティヴにしたいのですが、 ・変数宣言 ・変数への格納 ・呼び出し方 が分かりません。 当方、下記のようにしてみましたが・・・だめです。 dim filename as string ・ filename = activebook.filename ・ window(filename).activate 初心者質問で申し訳ありませんが、 アドバイスの程、宜しくお願いします。
>>391 Dim filename As String
filename = ActiveWorkbook.Name
Workbooks(filename).Activate
こんな感じ。
393 :
391 :2005/05/26(木) 13:50:25
>>392 ありがとうございました。早速試してみます。
394 :
デフォルトの名無しさん :2005/05/26(木) 21:38:53
質問です。 UserForm上に直線を配置するにはどうすれば良いでしょうか? 教えて下さい。よろしくお願い致します。
396 :
デフォルトの名無しさん :2005/05/27(金) 05:48:29
今選択されているシートを読み込むにはどうすればいいのでしょうか? 具体的には、 ・・・ ActiveChart.SetSourceData Source:=Sheets("ぬるぽ").Range("P1:P652"),・・・ このぬるぽってところを今開いているシートにしたいです。 今まではファイルが変わるたびにエディタを開いてぬるぽのところを変えていました。 説明下手ですいません。教えてください。
> 今まではファイルが変わるたびにエディタを開いてぬるぽのところを変えていました。 禿しくワロタ そんあことしてる奴も居るのかw
>>396 ActiveSheetプロパティとかSheetsクラスとか
399 :
デフォルトの名無しさん :2005/05/27(金) 18:17:39
accessで、ロジックでテーブルのリンクをしたいのだが、どうやってするか教えてください
400 :
デフォルトの名無しさん :2005/05/27(金) 21:27:04
このスレにはそぐわないかもしれないけど、質問です。 エクセルVBAで伝票発行(連続帳票)のマクロ作ってるんですが、印刷の段階でつまずいてます。 用紙サイズが特殊で、ページ設定の規定のリストに無く、ユーザー定義項目も無いプリンタなんですが、 うまい方法ないですか? ちなみにVBA始めて5日のド素人です。 よろしくお願いしまっす
ヘルプ読め
1つ質問させて下さい。 下記のようにセルの中に数字が入っているとします。 1行 きんたま 2行 きんたま 3行 きたんま 4行 たんきま 5行 たんきま 6行 たんきま 7行 たんきま 8行 たんきま 9行 まきんた これを1行目にカーソルを重ねた状態で、 下記のように同じ値のセルを結合させるマクロを考えております。 1行 2行 きんたま 3行 −−−− 4行 5行 6行 たんきま 7行 8行 −−−− 9行 まきんた 教えて君で申し訳ないですが、どなたかお願いします。
>>403 Forで上から読んでいって
Ifで上下が同じか判断させて
上下が違う位置の一つ前までを結合、その位置を変数に格納
また同じようにifで判断させて前回変数に入れた行から
上下が違う位置の一つ前までを結合。の繰り返し
あとはヘルプでも読め。
はじめまして。仕事の関係でExcelVBAを使うことになり、勉強をはじめました。 プログラムは全くはじめてなので、とりあえず簡単なプログラムから組んでみました。 ボタンをクリックすると、1〜50まで増えていくというものです。 Private Sub j = 1 For ii = 1 To 10 For i = 1 To 5 Cells(ii, i) = j j = j + 1 Next Next End Sub こらをさらに、偶数と奇数に分けたいのですが、どうやればいいのか分からないです。 ・もう一つボタンを作り、クリックすると奇数と偶数で上下or左右にわかれる。 考えとしては、cells(ii,i)が2で割り切れるかどうか判定して、割り切れれば偶数、 そうでなければ奇数というやり方だと思うんですが、よろしかったら誰か教えてください。 長文失礼しました。
>>405 Mod 演算子を使用します。詳しくはヘルプを。
始めまして、SetLayeredWindowAttributes関数について質問させてください 指定色を透明化、またはウィンドウ全体を透明化する物だと思いますが SetLayeredWindowAttributes MyhWnd, RGB(0, 0, 0), 0, LWA_COLORKEY このように使って黒を透明化できるのですが 複数色を透明化、指定色以外を全て透明化などできないでしょうか?
できません
条件付書式設定で色のついたセルを取得する方法ってありますか? 取ろうとしても何もないのですが
>>409 マクロの記録で条件付き書式の設定を取ってみるなり
ヘルプ読むなりお好きなように
>>409 条件付き書式の設定は普通の方法じゃとれないよ。
過去ログにちょっと出てたと思うけど。
414 :
デフォルトの名無しさん :2005/05/30(月) 14:39:26
誰かわかる方教えてください。 PowerPoint2003をVBから操作しています。 複数のファイルのスライドをInsertFromFileで1つのpresentationにまとめて 1つのスライドショーとして表示しているのですが、 スライドの内容のコピーは出来るけど、 スライドの背景やデザインテンプレートがコピー先に反映されません。 なんとかならないでしょうか。 手動でコピペなら貼付オプションで元の書式をそのまま使うとすると 上手く行きますが、VBAではそのような操作が出来るメソッドも見つからないし、 マクロ記録などしても、その辺りはコードが出来ないようです。 PowerPoint自体のデフォルト設定でもいいので、 上記の様なことが実現出来る方法はないでしょうか。
415 :
デフォルトの名無しさん :2005/06/01(水) 20:02:10
VBAで食べていけますか? MOUS Master持ってるのでVBAも使いこなしたいと思ってるんですが…。
デキル人間はExcel1本で食っていける ダメな人間はExcelを使いこなせても食うどころか収入にすら結べないだろう。
今仕事でエクセルVBA使ってます。 VBAだけじゃ、やっぱり無理だと思うし、仕事の種類にもよると思う。 個人でやるのか、どこかに就職するのか。 VBAで作ったものをどこかに納品するのか、自分の仕事を効率よく行うために使うのか。 それによって全然違う。 ITに特化してないような会社なら、VBA使えると意外と重宝がられるかもね。
VBA以外にも言えることだけど、言語の一つとして使えるぐらいならそれで十分 VBAが使いこなせればVB、Cの転向も楽 食うと言う意味でIT系は論外だと思うけどネ
419 :
デフォルトの名無しさん :2005/06/03(金) 18:55:08
新規に挿入したシートにも、セルダブルクリックのイベントプロシジャを自動的につけたいのですが、 どのようなコードをどこに書けば良いのでしょうか?
420 :
デフォルトの名無しさん :2005/06/03(金) 20:44:39
ハイパーリンクでsubadressに変数を設定するのはどうすればいいの? 文字列ならsubadress:="'○○'!A1"でできるけど… ダブルクオテーションとったらビックリするぐらいエラーになってしもうた。 助けてっ!そこのエロい人
>>419 Microsoft Visual Basic for Applications Extensibility 5.3を参照設定して、以下のコードでいかがでしょうか。Excel2000で試しました。標準モジュールに書きます。
Sub test()
Dim i, x
i = 0
Sheets.Add
For Each x In Application.VBE.ActiveVBProject.VBComponents
i = i + 1
Next
With Application.VBE.ActiveVBProject.VBComponents(i).CodeModule
.InsertLines 3, _
"Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)"
.InsertLines 4, _
"msgbox ""test"""
.InsertLines 5, _
"end sub"
End With
End Sub
422 :
デフォルトの名無しさん :2005/06/04(土) 11:17:50
<big><b><red>SeriesCollectionのNameプロパティで系列名を取得するとなぜかエラーになってしまいます。</red></b></big> 具体的にはある系列名を検索して、存在したら削除するというソースを書こうとしています。 ソースは以下のように書いています。 With Workbooks("○○.xls").Worksheets("△△").ChartObjects("グラフ1").chart For i = 1 To .SeriesCollection.Count If .SeriesCollection(x).Name = "系列1" Then .SeriesCollection(x).Delete End If Next i End With 上記を実行すると、.SeriesCollection(x).Nameでエラーがおきます。 エラーは「SeriesクラスのNameプロパティを設定できません」です。 デバックすると、i = 2のときに落ちています。 そこで、MsgBoxを挿入して、以下のソースを実行しました。 With Workbooks("○○.xls").Worksheets("△△").ChartObjects("グラフ1").chart MsgBox .SeriesCollection.Count MsgBox .SeriesCollection(1).Name MsgBox .SeriesCollection(2).Name End With 上記を実行すると、 まず「2」が表示され、次に「系列1」が表示され、 その次で落ちます。 以上の原因がわかるかた教えてください。 わからなくて本当に困っています。 お願いします。
>>422 グラフは使わんからよく知らんが
削除して減っんだから逆から回せばいいんじゃねーの?
For i = .SeriesCollection.Count To 1 Step -1
外してたらスマソ
424 :
デフォルトの名無しさん :2005/06/05(日) 22:17:42
smallscrollを使って指定のセルへ移動することは可能でしょうか? アクティブセルから右方向の指定したセルへ移動したいのです。 ちなみに現在は下記のように記述しています ActiveWindow.SmallScroll ToRight:=142 Range("ET5:EW5").Select 上記だと当然のことながらすご〜く下の方で編集していても 5行目へ移動してしまうので非常に使い勝手が悪いんです。 どなたかご教授いただけると幸いです。よろしくお願いします。
>>424 アクティブセルからオフセットじゃだめです?
426 :
デフォルトの名無しさん :2005/06/05(日) 22:36:56
>>425 早々のレスありがとうございます。
なにぶん初心者のため、オフセットがよくわかってなんです。
申し訳ありませんがとりあえず教えていただくわけにはいき
ませんでしょうか?実際動かしてみないとなんとも言えない
んで・・・・・・
よろしくお願いします
428 :
デフォルトの名無しさん :2005/06/06(月) 00:40:33
>>427 ありがとうございます。うまく編集すれば使えそうな気がします。
ところでオフセットでセルを指定するときに一番右端のセルは
指定できると思うのですが、一番右端から7列目というような
指定方法はございませんでしょうか?
もしできればご教授いただけると幸いです。よろしくお願いいたします
430 :
デフォルトの名無しさん :2005/06/06(月) 19:25:02
どうしてVBAってバグが多いんでしょう。 入力をすればするほど、本と同じに打っててもバグが出て困ってしまいます。 何に気をつけて入力すればいいですか。
> 何に気をつけて入力すればいいですか。 タイプミス
432 :
Excel2003 :2005/06/06(月) 21:32:48
UBound()関数を使用して、 多次元配列の2次元目の要素数を取得したいのですが、 下記のように記述すると、1次元目の要素数しか取得できません。 Dim a_test(3, 3) As String MsgBox UBound(a_test) どう記述すればいいんでしょうか????
>>432 UBound関数は1次元配列専用です。
その他、Join関数やFilter関数も一次元配列にしか使えないし、
ReDimステートメントでは多次元配列の最後の(一番右の)要素数しか変更出来ません。
これらはVBAで扱う配列の仕様なのでどうにもなりませんから、
Forステートメントでも使って求めるしかないですね。
>>432 MsgBox UBound(a_test,2)
435 :
デフォルトの名無しさん :2005/06/07(火) 11:24:24
EXCELのVBAで 現在のセル位置(A1とかB1とか)を取得する方法を教えてください。
MsgBox ActiveCell.Address(0, 0) 'アクティブセル MsgBox Selection.Address(0, 0) '選択範囲
437 :
デフォルトの名無しさん :2005/06/07(火) 19:04:59
ユーザーフォームのコンボボックスのRowsourceに他のシートの値(範囲)を読ませるにはどう書けば良いでつか?
438 :
デフォルトの名無しさん :2005/06/07(火) 19:30:10
>>436 ありがとうございます
マクロの記録を頼りにプログラムを組んでたのですが
どうしても出せなくて困ってました。
439 :
デフォルトの名無しさん :2005/06/07(火) 19:31:44
>>437 ん〜こんなんじゃダメ?
Dim i As Long
i = 1
Me.ComboBox1.Clear
Do While (Sheet1.Cells(i, 1) <> "")
Me.ComboBox1.AddItem Sheet1.Cells(i, 1)
i = i + 1
Loop
440 :
デフォルトの名無しさん :2005/06/07(火) 19:38:47
>>439 ありがとうございます。
.AddItemのあとに=とかつけてパニクってました。
感謝感激です。
441 :
デフォルトの名無しさん :2005/06/07(火) 23:30:24
excel2000で 押されたコマンドボタン(セルにフィットしている)の位置を たとえば"A1"などという形で取得するにはどうすればよいですか?
>>441 オブジェクトの位置と、その前にあるセルのサイズ(幅、高さ)から計算すれば?
443 :
デフォルトの名無しさん :2005/06/07(火) 23:43:20
>>442 すいません言葉が足りませんでした
私、実はexcel始めて3日目で、押されたオブジェクトの参照を
コード内でどのように手にするのかすら知りません・・・
(「ActiveSheet」みたいな感じのグローバル変数があるのでしょうか?)
それができればそいつからプロパティを引き出して計算できるということでしょうか?
ヘルプ読め
445 :
デフォルトの名無しさん :2005/06/08(水) 10:10:12
簡単な問題かもなのですが 一つの範囲の数値の合計を出すのに Cells(1, A).Value+Cells(1, B).Value+ … +Cells(1, E).Value としてるのですが、もっとスマートに出来ないものでしょうか? Excel上での Sum(A1:E1) のような式が無いものかと思い 書き込みさしてもらいました。
>>445 SUM使えばいいじゃん。
使い方はヘルプでも読め。
447 :
デフォルトの名無しさん :2005/06/09(木) 13:18:58
445 だけなら 446 でいいとおもう。後で面手しやすいとかなら、こんな 感じかなぁ。 Dim i As Long Dim lngSum As Long For i = 1 To 20 If IsNumeric(Sheet1.Cells(1, i)) Then lngSum = lngSum + Sheet1.Cells(1, i) End If Next
>>447 > 後で面手しやすいとかなら
だったらユーザー定義関数にした方がいいような気が
Function iSum(Rng As Range) As Double
Dim buf As Double, rObj As Range
For Each rObj In Rng
If IsNumeric(rObj.Value) Then buf = buf + rObj.Value
Next
iSum = buf
End Function
MsgBox iSum([A1:A20])
根本的にユーザー定義関数?使う意味がよくわからん。 iSum = Application.WorksheetFunction.Sum(Rng)
450 :
質問 :2005/06/09(木) 21:18:54
Excel2003のVBAについてです。 Filter()を使用して、下記のような多次元配列の2列目中の値を 検索するにはどうのように引数を指定すればいいんでしょうか?? Dim A_Rank_sort(3, 5) As String A_Rank_sort(1, 1) = "a" A_Rank_sort(1, 2) = "a" A_Rank_sort(1, 3) = "a" A_Rank_sort(1, 4) = "a" A_Rank_sort(1, 5) = "a" A_Rank_sort(2, 1) = "b" A_Rank_sort(2, 2) = "b" A_Rank_sort(2, 3) = "b" A_Rank_sort(2, 4) = "abc" A_Rank_sort(2, 5) = "b" A_Rank_sort(3, 1) = "c" A_Rank_sort(3, 2) = "c" A_Rank_sort(3, 3) = "c" A_Rank_sort(3, 4) = "c" A_Rank_sort(3, 5) = "c" Filter( ? , "abc")
> Filter 関数 > > 引数 sourcearray 内で引数 match に一致する文字列がなかった場合は、Filter 関数は空の配列を返します。 > 引数 sourcearray が Null 値であるか、1 次元配列でない場合は、エラーになります。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ とヘルプに書いてある。 一次元配列に書き出してからFilter掛けるなり、Forステートメントで総当たりかますなりお好きなように。
453 :
デフォルトの名無しさん :2005/06/09(木) 21:30:00
454 :
デフォルトの名無しさん :2005/06/11(土) 14:06:23
Excel-VBAのお奨め参考書を教えて下さい プログラム経験はあり
>>454 紙媒体に拘らないならmoug.netでいいんじゃね?
456 :
デフォルトの名無しさん :2005/06/11(土) 15:40:11
うむ、紙ベースははずれが多い。
457 :
デフォルトの名無しさん :2005/06/12(日) 11:21:16
VBAで5÷2=2・・・1の余りの1の部分を計算したいのですが どうすれば良いですか?
458 :
デフォルトの名無しさん :2005/06/12(日) 11:35:25
5 mod 2
459 :
デフォルトの名無しさん :2005/06/12(日) 16:18:39
紙ベースは確かにハズレ多いな 体系的に書かれた物(書こうとした痕があるもの)があるのかなぁ VBAつーかVBだったらあるんかな
460 :
デフォルトの名無しさん :2005/06/12(日) 19:07:56
461 :
デフォルトの名無しさん :2005/06/14(火) 23:05:32
Amount:="=Sheet1!R1C1:R1C6" のR1C1:R1C6の部分をFor文で R2C1:R2C6→R3C1:R3C6→R4C1:R4C6→ という感じでループを回したいと思っています。 変数iを使って Amount:="=Sheet1!R" & i & "C1:R" & i & "C6" 等、いろいろ試しましたが、ことごとくコンパイルエラーが出てしまいます。 どう書いたらいいのか、もし良ければ教えてください。
Amount:=って何の引数だよ? なんで最低限の情報も書けないかなぁ?
463 :
461 :2005/06/15(水) 01:48:18
>>462 棒グラフにエラーバー(Y誤差範囲)をつけるときに出てきます。
もう少し詳しく言うと、棒グラフの各棒に対するエラーバーの長さがR1C1:R1C6に書いてあります。
棒グラフは何枚もあり、1枚目の棒グラフのエラーバーの情報はR1C1:R1C6に
2枚目の棒グラフのエラーバーの情報はR2C1:R2C6に…
という感じになっています。
棒グラフにエラーバーをつけるときのスクリプトは、1枚だけ書くなら
ActiveChart.SeriesCollection(1).ErrorBar Direction:=xlY, Include:= _
xlPlusValues, Type:=xlCustom, Amount:="=Sheet1!R1C1:R1C6"
で良いと思うのですが、For文を使おうとしたときに、
エラーバーの情報が書かれている範囲を一行ずつずらしていく方法がわからないんです。
うまく説明しにくいのですが、これで伝わりますでしょうか?
464 :
461 :2005/06/15(水) 02:05:25
すみません。 上の問題について、別の言い方で説明させて下さい。 A1,A2,…A10のセルを順番に選択するには、 Dim i As Integer For i = 1 To 10 Range("A" & i).Select Next i でいいですよね?(実際は、Range("A" & i).SelectとNext iの間に何か書いてマクロに仕事をさせる) では、1つのセルではなく、範囲を順に選択したい時はどうすれば良いのでしょうか? 具体的には、R1C1:R1C6,R2C1:R2C6,…,R10C1:R10C6を順に選択する方法や または、A1:F1,A2:F2,…,A10:F10を順に選択する方法が知りたいです。 ちなみに、エラーバーを書くときにはA1:F1式の書き方は使えなさそうなので、 R1C1:R1C6式の書き方での方法を、どなたかご教授願えませんでしょうか?
465 :
デフォルトの名無しさん :2005/06/15(水) 09:11:18
そういう内容なら、 Sheet1.Cells(RowIndex, ColumnIndex) 使う方が楽だよ。
>>464 >では、1つのセルではなく、範囲を順に選択したい時はどうすれば良いのでしょうか?
ヒント:Rangeオブジェクト
467 :
デフォルトの名無しさん :2005/06/15(水) 17:22:30
セル(行, 6)の値が6桁、もしくは7桁でなければメッセージを出力するようにしたいの ですが、下記だとちゃんと動作しません。6だけとか7だけなら大丈夫なんですが、 orの使い方がおかしいのでしょうか? つまらない質問で恐縮ですがお願いします If Len(Cells(行, 6)) <> 6 Or 7 Then
あきらかにおかしい。 7の部分にも式がいる。
469 :
467 :2005/06/15(水) 17:38:01
>>468 レス有難うございます。
↓みたいに書いてみたのですがダメですた。
If Len(Cells(行, 6)) <> 6 Or Len(Cells(行, 6)) <> 7 Then
何か根本的に間違ってますか?
バカな質問なんだと思いますが、よろしくです。
>>469 それじゃ「6以外の場合、又は7以外の場合」なので、6と7以外の数値はもちろんのこと、
6も「7以外」に該当し、7も「6以外」に該当するので全ての数値でTrueが返る。
整数値で6又は7以外ってことは、6未満と7より大きい物が該当すればいいのだから
If Len(Cells(i, 6).Value) < 6 Or Len(Cells(i, 6).Value) > 7 Then
でOKでしょ。
又はLike演算子を使って
If Len(Cells(i, 6).Value) Like "[!67]" Then
とか。
471 :
467 :2005/06/15(水) 18:00:12
>>470 解決しました。ありがとうございました。
ゴメン、Like演算子使うときは If Not Len(Cells(i, 6).Value) Like "[67]" Then だわさ。
範囲を順に選択するときに、 Dim i As Integer For i = 1 To 10 Range("A" & i & ":F" & i).Select Next i だと ":F" の所でエラーが出てしまいます。 教えてばかりで済みませんが、お願いします。
>>473 普通に動いてる
by WindowsXP、Excel2002
475 :
デフォルトの名無しさん :2005/06/15(水) 22:19:44
>>474 自分で書いた時には、スペースを全く入れずに、
Range("A"&i&":F"&i).Select
と書いていたのが、コンパイルエラーの原因でした。
ありがとうございました。
ISBNを入力すると amazonや、books.or.jp等のホームページから からタイトル、作者、出版年、などの書誌データ を取得する というのをEXCELかACCESSで 実行できるようにしたいのですが、 どうすればいいでしょうか
>>477 VBA関係ない。
どうすれば取得できるかがわかった上で
それをVBAでやるにはどうすれば良いかがわからなかったらまた来い。
479 :
デフォルトの名無しさん :2005/06/17(金) 19:08:49
複数のシート1,2があります。 それに両方シート保護かけてます。 片方のシート保護を解除しようと 両方のシートを選択した状態でマクロで Worksheets(1).Unprotectとやるとエラーで返ってきてしまうんです。 片方だけ選択した状態ならうまくいくんでしょうが、 現時点ではそれができなくて困ってます。 ぐぐったりしてみましたが、こういうエラーはあるらしいということしかわからず 解決法がまだわかってません。 この場合どのように回避すればよろしいでしょうか。
480 :
デフォルトの名無しさん :2005/06/17(金) 19:24:42
>>479 すいません解決しました。
結局最初単一選択して処理が終わった後
必要な部分を選択しなおすようにしました。
>>477 Webサービスクライアントをちゃんと勉強するのがすじだと
おもうけど、amazonならURLベースでの検索にも対応しているから
たんなるHTTPクライアントの作り方だけ勉強すれば終わり。とりあえず
amazonいって関連ページ読んできな。
482 :
名無しさん@Linuxザウルス :2005/06/21(火) 14:32:55
EXCEL2000でファイル保存する時に、unicodeで保存する方法教えてください。 調べた限りでは、VBAではS-JISしか無理っぽいのだが。。。
483 :
科学 :2005/06/21(火) 19:37:22
VBAで遺伝的アルゴリズムやニューラルネットを使って
相場の予測をしようと しているものです。
初歩的なコードは入手したんですが、 自分で使えるよ
うにする技術がありません。
そこで、VBAのコードを代わりに書いて下さる方を探して
います。3万円の謝礼金も用意しています。
詳しくは私のHPまでお越しください。
http://homepage3.nifty.com/sikou-off/
>>483 マルチポストはうざがられることぐらい知っとけ。
485 :
デフォルトの名無しさん :2005/06/23(木) 15:55:06
質問です。 ACCESSなんですが、 フォームの中にサブフォームを作って、そのサブフォームでは テーブル(レコードセット?)1個だけを置いて表示するようにしています。 で、このテーブルのカレントレコードを見て その後の操作でページ遷移させた先の画面で、レコードの内容を テキストに初期表示させたいのですが・・・ サブフォームに表示させたテーブルのカレントレコードを読み取る方法が 分かりません。 [レコードセット名]![列名] ではダメみたいだし・・・。
486 :
デフォルトの名無しさん :2005/06/23(木) 16:39:21
>>477 「なでしこ」使えばラクだと思いますよ。
AmazonAPIキーを取得すれば、検索の自動化は許可されるとおもいますよ。
後は、なでしこで、HTTP関連、正規表現、エクセル操作関連の命令を組み合わせてプログラム。
いいものができますように。
487 :
デフォルトの名無しさん :2005/06/23(木) 16:54:05
>>485 Me.サブフォーム名.Form.コントロール名.Value
>>487 レスありがとうございます。
ただ、ところどころ「.」を「!」に代えないとマズイような。
で、今までずっと出来なかった原因を、
色々と言葉を代えてネットで検索してみてようやく発見しました。
サブフォームをウィザードで作った場合、
フォームの一覧で見える名前と、コードを打つ時に使うサブフォーム名が
食い違ってしまうみたいで、そこの設定を直したら
「Me!サブフォーム名.Form!コントロール名.value」
とかでいけました。
489 :
488 :2005/06/23(木) 17:26:12
訂正。 >サブフォームをウィザードで作った場合、 >フォームの一覧で見える名前と、コードを打つ時に使うサブフォーム名が >食い違ってしまうみたいで ではなくて、 フォーム一覧からサブフォームの名前を変更したときに デザインビューで見たときの名前までは変更がされておらず そこの手動での修正をしていなかったので失敗していたようです。
490 :
デフォルトの名無しさん :2005/06/23(木) 17:42:22
>>488 > ただ、ところどころ「.」を「!」に代えないとマズイような。
まずいわけじゃない。つーか、! って好きになれん。
491 :
デフォルトの名無しさん :2005/06/23(木) 19:47:25
質問させて下さい。 トリップ作成とかに使われるcrypt関数に関してですが。。 uncrypt.dllはググって入手したのですが、VBAからどの様に使えばいいのか教示戴ければ幸いです。 板違いならお詫び申し上げます。
普通のdllの使い方と変わらないでしょ。 普通の使い方すらできないなら勉強しろ。
493 :
デフォルトの名無しさん :2005/06/23(木) 20:30:07
ヒントとなるキーワードくらい言ってもいいんかね。山椒とか
494 :
デフォルトの名無しさん :2005/06/23(木) 23:36:35
>山椒とか って何??
参照のこと。 これ以上はスレ違い。
496 :
質問よろしくお願いします。 :2005/06/24(金) 08:44:44
エクセルVBAで コピー散乱を防止するために、 画面に無理やり名前を登録したいのですが。 cookieを取得して、入力する方法ってありますか?
497 :
デフォルトの名無しさん :2005/06/24(金) 14:16:36
エクセルでなぜCookie?
つーか何処と通信シテンノ? (;゚∀゚)=3 ハァハァ
499 :
デフォルトの名無しさん :2005/06/28(火) 18:34:36
質問です Excel2000でどうすればウェブクエリの対象URLに変数を指定できますか?
500 :
デフォルトの名無しさん :2005/06/29(水) 04:04:24
ツール>マクロ>新しいマクロの登録>OK クエリの操作を手動で行う >■ボタンで停止 生成されたコード中に、自分が指定したURLが入っているので そこを変数にすればよろし。 質問 Sub VBのバグ() For i = 0 To 23 Step 1 今 = DateAdd("n", i * 60, 0) If 今 = #5:00:00 AM# Then MsgBox 今 End If If 今 = #6:00:00 AM# Then MsgBox 今 End If Next End Sub 午前5時は常無視される。なんでだろ?
>>500 それをVBのバグとか言う奴は
浮動小数点演算について勉強しなおしてこい。
因みに
Dim 今 As Date, i As Long
For i = 0 To 23
今 = TimeSerial(i, 0, 0)
If 今 = TimeValue("5:00:00") Then
MsgBox 今
ElseIf 今 = TimeValue("6:00:00") Then
MsgBox 今
End If
Next i
とすれば普通に5:00もTrueが返るし、
If 今 = #5:00:00 AM# Then
↓
If CLng(今 * 24) = #5:00:00 PM# * 24 Then
でも5:00でTrueを返せる。
何故そうなるのかは浮動小数点演算について調べればわかる。
因みに5:00以外にもいくつか
>>500 のコードでTrueを返さない時間があるはずだ。
>>501 あっ、そっか!時刻は一日を1として算出しているんだった!!
ありがとう!!!
503 :
デフォルトの名無しさん :2005/06/29(水) 12:42:28
改行コードがLFのみなテキストをLine Inputで読み込む方法ないですか?
>>503 @Line Inputで読み込んだ後、vbLfでSplitする
AFSOのReadLineメソッドを使う(LFも改行扱いになります)
Bテキストエディタで改行コードの一括置換を行う
505 :
デフォルトの名無しさん :2005/06/29(水) 23:58:21
Excelのカスタムアプリにおける定数の保守についてです。Excelで業務アプリ組んでる人、意見下さい。 環境: Excel 2000 50〜100人規模対象 やりたいこと: データベースからデータを取得するコードを組み込んだVBAProjectを配布 データベースへアクセスするのに必要な定数(データベースのフルパスやSQL句)を後から変更できるようにしたい。 というようなことを構築中なのですが、定数をどうやって持たせるか悩んでます。 管理者あるいは引き継いだ人間が定数を容易に保守できるように、かつユーザからは容易に触れることができるように したいのです。 サーバに置くシステムなら、ちょこちょことコードの定数定義を書き換えれば済む話ですが、Excelで配布する以上、 ユーザ任せで複製増殖しまくり、散らばった複製のコードやモジュールを差し替えるのは現実的ではありません。 目下のところ、設定ファイルに初期値を持たせるくらいしか思い当たらず、また、そのファイルをクライアントに置くか サーバに置いて共有させるか、どちらがいいかも決めかねています。 (特に専門教育を受けることもなく自己流でやってきたので、言語の仕様はともかく、システム全体の組み方となると どこか大事なところが欠けているような気がします。) どういう手法を取るのが最善でしょうか?
506 :
デフォルトの名無しさん :2005/06/30(木) 10:18:19
>>505 データベース接続以外の定数をデータベースに持たせる、、ってのは?
507 :
デフォルトの名無しさん :2005/06/30(木) 15:24:51
………………へんじがない。 ただのしかばねのようだ……。 ▼
509 :
505 ◆EmCZerrWa2 :2005/06/30(木) 23:49:54
>>506 解決にならないと思います。
>>508 .exeファイルでExcelファイルのOpen/Closeを閉じ込めるという発想ですね。
追求すれば解決の目はありそうですが、ファイルの保存先やファイルの継承利用はユーザ任せにするので、
今回の目的には向いていない面がありそうです。
(もっと言うと、コンポーネントだけ配布して、ワークシートの作り込みはユーザ任せにするつもり。)
505で書いた設定ファイル利用ですが、
・クライアントに置いた場合:設定変更はユーザが行う。設定はPC1台につき1回必要。
短所)ユーザに設定値を配布しなければならない。ユーザにスキルが必要(そしてスキルがない)。
・サーバに置いた場合;設定変更は管理者が行う。設定は全体で1回だけ。
短所)データベースの置き場所を自由にしたいがためなのに、肝心の設定ファイルの置き場所を固定しなければならない。
このあたりが迷いどころです。
RDBMSなら難しくないのですが、ユーザ任せにするためにExcel環境を選択してるのがすでに無茶でしょうか。
もっとスマートな解決方法があっても良さそうなのですが。
510 :
デフォルトの名無しさん :2005/06/30(木) 23:50:57
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?お願いします。
>>510 ForeColorプロパティにRGB値を設定。
項目ごとに色を分けるのは、たぶん不可能。
512 :
デフォルトの名無しさん :2005/07/01(金) 00:18:36
>>509 >あまり深く考えて質問したとは思えない。
状況をよくしりませんが、SQL句程度ならなりうると思いますよ。
513 :
デフォルトの名無しさん :2005/07/01(金) 00:19:38
あれ、ペースと内容が変わってる >解決にならないと思います。 状況をよくしりませんが、SQL句程度ならなりうると思いますよ。 の意。まーどーでもいいが。
514 :
デフォルトの名無しさん :2005/07/01(金) 00:25:12
>>513 あぁなるほど、SQL句はデータベース側に置けばいいかもしれませんね。
んでも、データベース接続設定はどこに置いたらいいでしょう?
これが一番やっかいなのですが。
あと、SQL句(というか抽出条件)もユーザ任せにできたらいいな、というのが難解なところです。 そういう仕様が前提になっているために、安易にデータベース側(共有側)に持たせることが出来ないのです。 自由度を求めすぎかも。
517 :
デフォルトの名無しさん :2005/07/01(金) 06:51:25
>>515 それだけはどうにもならんだろう。コードで手当たり次第接続してみるようにすることもできるが、、
あと、SQL句をユーザーが自由に、ってのはデータを破壊する可能性があることをお忘れなく。
詳細検索画面をたくさん用意して 考えられる条件網羅のオプションや コンボくっつけたことならある 接続設定も画面で選択・入力させたら?
519 :
デフォルトの名無しさん :2005/07/01(金) 08:19:31
5113ありがとうございました!項目ごとにはダメなんですね。ちなみに日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのですが、何か良い方法はないでしょうか?よろしくお願いします!
113 名前:名無しさん@そうだ選挙にいこう [] 投稿日:2005/07/01(金) 08:07:51 1083ありがとうございました!昨日ずっと悩んでいたので、助かりました!ちなみに日曜〜土曜まで何かのコントロールで表示させて日曜と土曜を赤と青にしたいのですが、何か良い方法はないでしょうか?お願いします。
521 :
デフォルトの名無しさん :2005/07/01(金) 15:55:55
520はどーいう意味?
519 = Excelスレとのマルチ って意味だと思う。 まぁ、前の質問(510)からマルチだから もう答える必要は無いだろ。
523 :
デフォルトの名無しさん :2005/07/01(金) 16:21:06
マルチとは?
525 :
デフォルトの名無しさん :2005/07/01(金) 18:47:44
>>516 そんなん、SQL句をもつデータベース、スキーマ、テーブルだけ固定しとけば、何も問題ないのでは?
526 :
デフォルトの名無しさん :2005/07/01(金) 19:54:37
あるエクセルファイルに特定のフォントが使用されているかを チェックすることは可能でしょうか?
527 :
デフォルトの名無しさん :2005/07/01(金) 20:22:18
519の者ですが、いろんなところで質問するのは失礼ですね。失礼致しました。すいません。あらためてお願いします!ListBoxで色を付けれないとなると他のコントロールで良い方法はないでしょうか?日曜〜土曜を表示させ赤と青を付けたいのです…お願いします!
あるけど教えない。 未だにマルチしたままだから。(向こうの質問取り下げてないし) というかここまで無礼だとマルチ止めても(向こうの質問撤回しても) 答えたくなくなるな。 そんなに急いで知りたいなら自分でググでばいい。 1日何千回検索しようと誰も文句言わないから。
「ListBox 文字色」 とかでググれば代用法はいろいろ出てくる。 マルチしてる暇があったら自分で調べろヴォケ!!
530 :
ホームページ プロダクション :2005/07/01(金) 20:47:44
>>517 >>525 いかんせん今までシステム化を軽視してきた会社なもんで、データベースは漫然と存在するだけ、
今後より高度なRDBMSに入れ換えて配置も整理してという段取りになる予定、しかも異動の多い会社で
いつまでも自分が面倒見るわけにもいかない、かと言って後任として育てられる人材もいない、
というような環境なので、データベースの接続設定にも保守性を確保したいと思いました。
が、やっぱり無謀ですよね。
でも、いろいろ意見を交換させてもらって、少し目指すべきものが見えかかってきました。
もうちょっと考えを練ってみます。
>>517 そういや、SQL句によっちゃテーブルのデータをいじり倒すことができてしまいますね。(;´д`)
コード中ではスナップショットでレコードセットを取得するようにしてるんですが、それでもSQL句で
データ壊すことが可能ですか?
いい加減飽きた そろそろやめろ
533 :
デフォルトの名無しさん :2005/07/01(金) 22:15:18
>>531 SELECT * FROM Table1; DELETE * FROM Table1; っていうSQL 打たれたら終わりだろ。テーブル構造
書き換えるようなSQL打たれたら、おまえが全責任とらされるぞ。
その程度の知識なら、ユーザーに自由度持たせるのは企業にとってはマイナスだらけだな。
534 :
デフォルトの名無しさん :2005/07/01(金) 22:16:20
>>533 いやもうおっしゃる通りなんですが、データベースというかSQLの知識が浅いので確認なんですが、
スナップショットでもSQLによっちゃデータあぼん、ということでよろしいんでしょうか。
ユーザーに自由度持たせたければ、チェックルーチンがコードの50%以上になるとおもうよ。それ くらいの覚悟でやればいいけど、それにしても経験がないと無理。
537 :
デフォルトの名無しさん :2005/07/01(金) 23:56:34
527ですが向こうの質問はどうやってとりさげるのですか?あと何がそんなに無礼でした?2ちゃんねる自体初心者なもので…お願いします。
>>537 気にするな。
どっちにしろもう手遅れだ。
社会に出てから殺人して「人を殺しちゃいけないなんて知らなかった」が通用しないように、
2chでマナーに反する書き込みしてから「初心者なのでマナーを知らなかった」は通用しない。
今回の質問は、もう答えてもらえないから、次の質問から気を付けることだね。
何に気を付けるかは案内とか行って勉強してこい。大体これをここで聞くこと自体もかなり無礼な行為。
まあ1年も経てば今回と同じ質問しても答えて貰えるかもしれないけどな。
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。
540 :
デフォルトの名無しさん :2005/07/02(土) 09:24:55
このスレは殺伐としてまつね。
ウインドウ透過技術教えてください トホホ
>>545 VBスレかAPIスレ行け。
ユーザーフォームで使うにしろ、API使う物はスレ違い。
ここはVBAスレだから。
547 :
デフォルトの名無しさん :2005/07/02(土) 22:26:30
はじめまして。UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。
>>547 どこが「はじめまして」なのやらw
510 :デフォルトの名無しさん :2005/06/30(木) 23:50:57
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?お願いします。
539 :デフォルトの名無しさん :2005/07/02(土) 07:23:03
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。
549 :
質問 :2005/07/03(日) 14:07:14
ファンクションプロシージャンに配列を渡して値を代入した後に、 その値を表示させるマクロを書いたのですが、 msgboxで表示させると0で表示されてしまいます。 何が問題なのでしょう?? Sub FunctionTest() Dim Ar(10) As Integer ''配列Arを宣言 fun2 (Ar) 'ファンクションプロシージャfun2を呼び出す MsgBox Ar(0) '配列Arの0番の値を表示する End Sub Function fun2(x) x(0) = 10 '10を代入する fun2 = x '配列を戻す End Function
配列は渡せない 他の方法で代用すべし
551 :
デフォルトの名無しさん :2005/07/03(日) 17:31:55
>>551 Option Explicit
Sub FunctionTest()
Dim Ar(10) As Integer ''配列Arを宣言
Call fun2(Ar) 'ファンクションプロシージャfun2を呼び出す
MsgBox Ar(0) '配列Arの0番の値を表示する
End Sub
Private Function fun2(ByRef x As Variant)
x(0) = 10 '10を代入する
End Function
552 :
551 :2005/07/03(日) 17:45:30
自分にレスしちまったよ orz
>>549 「値渡し」と「参照渡し」がわかってないね。
553 :
549 :2005/07/04(月) 06:48:12
554 :
デフォルトの名無しさん :2005/07/04(月) 18:20:59
VBA素人です。教えてください。 Excel2000なんですが、フォームを使ったルーチンを組もうとしています。 1.よくインストーラなど、順を追って説明するGUIには「次へ」みたいな ボタンがありますが、マルチページでコマンドボタンなどを押す事により 次あるいは前のページ(タブ?)へ移動するようなことは出来るでしょうか? 2. フォーム上に「キャンセル」あるいは「完了」ボタンを設けて、押す事に よりフォームというかマクロを終了することはできますか? (フォームを画面から消して、マクロを終了させたい) いちいちフォームの右上とかの[x]を押さなくてもよいようにしたいのです。 Cでいうところのexit()とかがあればよいのですが。 宜しくお願いします。
>>554 1.出来ます
2.できますか
詳しくはヘルプ参照。
ググった方が早いかもしれんが。
556 :
554 :2005/07/04(月) 18:47:46
>555 HELPにはQ1はともかくQ2はありません。具具っても見つかりません。 end subとかいう回答ならばお腹一杯です。
Application.Quit
558 :
554 :2005/07/04(月) 18:54:36
忘れていましたが、「終了」ボタンを押したとき、Excelが終了するのは まずいのです。 すみません。
ThisWorkbook.Close
560 :
554 :2005/07/04(月) 20:12:29
なんやらようわかりませんが、皆様レスサンクス
>>554 1. できる
2. できる
状況がよくわからんので、これ以上のアドバイスはほとんど無理。1 は簡単だろ。 2 は、全ての
フォームを unload すりゃいいんちゃうかと思うが、設計次第ではそれでも VBA は動いてる。
Hide は消えるだけで終了しないんじゃないの。 unload がこの場合は正しいような気がする。 自分は詳しくないから断定して言えないけど。 だからこの板に来ているのだけれど。
565 :
563 :2005/07/06(水) 00:57:02
解説ありがとね。
566 :
デフォルトの名無しさん :2005/07/07(木) 22:17:45
Excel2002のVBAで、セルの内容が 値(数値や文字列)なのか、数式なのか、配列数式なのか、を判断する方法って無いですか? 値か数式かの判断だけなら、formulaとvalueの返す値が違えば数式って判断できるけど 普通の数式と配列数式はformulaとformulaarrayのどちらで取得しても同じ値が返ってきます。
567 :
デフォルトの名無しさん :2005/07/07(木) 22:42:12
UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。
569 :
デフォルトの名無しさん :2005/07/08(金) 16:32:25
バイナリファイルの指定した部分を読み込んで 10進数表示にしたいです。 どうすりゃよかとですか? perlだと↓な感じ。 open (FILE, $in_filename ); seek FILE, hex("00053B49"), 0; read (FILE, $buffer_a, 1); seek FILE, hex("00053B5B"), 0; read (FILE, $buffer_b, 1); close (FILE); $a = unpack("C", $buffer_a); $b = unpack("C", $buffer_b);
普通に
571 :
569 :2005/07/08(金) 17:45:42
seekでファイルポインタは動かせた。 その後の読み込みの方法が?です。 Getだとseekが効かないし、Inputでできるんですかね。 Inputじゃ期待通りの値にならない。
572 :
デフォルトの名無しさん :2005/07/08(金) 19:02:21
VBAでインターネットエクスプローラーを操作することはできますか? 主にデータを送信したり、データを受信したりしたいです。 ご返信よろしくお願いします。
>>572 できるよ。
やり方は自分で勉強してね。
たぶんVBAの本や解説サイトより、
VB6のものを参考にした方がいいだろうな。
575 :
デフォルトの名無しさん :2005/07/09(土) 15:06:37
サブミットってなんなんバカのお前らでもわかるんちゃうん? これくらい。
576 :
デフォルトの名無しさん :2005/07/09(土) 16:17:07
サーブルーチンってなんなん? あほの諸君らにもわかるんちゃうん?こたえてみ!
サブルーチンならわかるけど サーブルーチンは知らん
おれのあそこはサーベルちんちんと呼ばれてるが
鞘つきサーベル
580 :
デフォルトの名無しさん :2005/07/10(日) 03:08:11
そんなことよりちょっとだけ質問させてください。UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。
そんなことより質問させてくれ。 VBAってEXCELを使った一般事務でも使うことあるの?
>>580 マルチ、条件後出し、頻繁な催促。
2chのマナー違反をこれだけやってれば、誰も答えてくれなくて当然。
>>581 あるよ。
普通に使ってる。
表計算ソフトはマクロが使えてナンボだからね。
ワープロならまだしも、表計算ソフトはマクロ使えないうちは
「表意計算ソフト(Excel)使えます」とは言えない。
>>582 ま、まじでか・・・orzこれから勉強するかな
サンクス
>571 もう解決してるよな・・・。 やったことないけどGet使えばできそうだし。HexもVBAで使えるし・・・。 できないなら興味はある。
585 :
デフォルトの名無しさん :2005/07/10(日) 13:54:09
VBAっていうのは特別なソフトを購入しなければいけないのでしょうか? だれかおしえてください。
587 :
デフォルトの名無しさん :2005/07/10(日) 14:42:57
visual basic.NET 2003 を持っているのですが、 これだけでもVBAと同じことはできますか? また、コードの書き方などはやはり違うものなのでしょうか?
589 :
デフォルトの名無しさん :2005/07/10(日) 15:31:59
急にsavファイルを読み込まなくなったんだけど、どうすれば直せます?
Excel 2000 VBAの質問です。宜しくお願いします。 1.コールバック形式のコントロールをコマンドボタンから呼び出したい。 カレンダーをフォームに貼る場合に、場所を取らない Microsoft Date and Time Picker Control 6.0(SP4)を使いたいと思います。 しかし、このコントロールは操作をしなくても今日の日付の値を持っているようで、 毎回使用者に日付を入力させたい、という目的がある場合は、操作を見過ごされ そうで具合が悪いのです。(操作もしていないのに値が表示されていると、 デジャブに陥るかもしれない) テキストボックスとコマンドボタンを組み合わせ、コマンドボタンが押されたら カレンダーがポップアップし、日付を選ぶとテキストボックスに値が出るように したいと思います。 正直VBAはよくわからないのですが、CommandButton*_click()イベントから このコントロールを呼び出すにはどう書けばよいのでしょうか? 2.VBA中からOSのcopyコマンドなどを呼び出せるか。 テンプレートとなるファイルを開いて加工した後、「名前を付けて保存」でも いいのですけど、バグを入れてしまった場合にテンプレートを破壊しそうで 気持ちが悪いです。できれば予め名前を変えたコピーを作成したいと思いますが 具体的にはどう書けばよいのでしょうか?
>>590 1.
事前に非表示で配置しておいて、
ボタン押したら表示するようにすればいいだけじゃん。
具体的なやり方はググるなりヘルプ読むなりお好きなように。
2.
わざわざそんなもん呼ばなくても、VBAにもFileCopyステートメントがあるし、
DOSコマンド呼ぶよりはFSO使う方が一般的。
具体的なやり方はググるなりヘルプ読むなりお好きなように。
592 :
デフォルトの名無しさん :2005/07/10(日) 18:55:21
>>591 不親切レスサンクス
1. そんなやり方はググってもヘルプにもありません。
2. FSOってのは知りませんでした。調べてみます。
>592 > 1. そんなやり方はググってもヘルプにもありません。 うちのExcel2000のヘルプには載ってる まぁ、あとはがんがれ
>>592 十分ちょっとで「ありません」かよ。
そういうのは「ありません・みつかりません」じゃなくて「探してない・調べてない」って言うんだよ。
まあ、VBAの知識以前に人としての標準的な思考力があれば数秒で見つかるけど。
ここの質問者ってのは検索能力も低いやつが多いね
596 :
デフォルトの名無しさん :2005/07/10(日) 20:04:34
そんなことよりちょっとだけ質問させてください。UserFormのListBoxの項目(文字)に色をつけるにはどうすればよろしいですか?日曜〜土曜を何かのコントロールで表示させて日曜と土曜を赤と青にしたいのです。
>>596 おまえ、元の質問者じゃないだろ
いい加減コピペ止めろ
>>595 スレの立て方にも問題があるんだと思うな。
まったくテンプレ張ってないでしょ。
>>596 しつこい。
アンタの質問は「ボンカレーでどう料理したらシチューができますか?」
ってきいているようなもんだ。もともとそんな機能ないんだからムリ。
ボンカレーでどう料理したらシチューができますか?
>>599 日本で大衆に認識されてるカレーとシチューは別物ですが、
料理の定義としてはカレー=シチューですが、何か?
う・・うーん とりあえず色を取るためにミルクをたっぷり注いで・・・ あ、ビーフシチューでいいならまだ近いかな・・
インドではスパイスを用いた料理はすべてカレー
> インドではスパイスを用いた料理はすべてカレー 嘘ついじゃダメだよ。それとも無知なだけかな。 スパイスを用いた『煮込み』料理がカレーだよ。
カレーとシチューを深く議論するスレVer.4はここですか?
この前の伊東家で「残ったカレーを親子丼にする裏技」あったし、意外と余裕かもしれん。
辞書編纂者になって、シチュー: ボンカレーもシチューのひとつ。 と書けば解決!
607 :
571 :2005/07/10(日) 23:11:04
>>584 まだ未解決です。
やっぱり、Getを使うってことでいいんですかね?
608 :
584 :2005/07/11(月) 00:10:38
>>603 それは日本や欧米の定義じゃないか。
デタラメ言うな。
612 :
571 :2005/07/11(月) 10:51:02
できた( ´Д⊂ヽ
こんな感じ。これで1Byte取れた。
Dim strREC As Byte
GetFileNo = FreeFile
Open Filename For Binary As #GetFileNo
Get #GetFileNo, 197, strREC
>>608 「Get #1, Position, MyRecord」の通りだった。Thx.
613 :
デフォルトの名無しさん :2005/07/11(月) 11:49:15
質問です。 なんかメチャ初歩的なことなんですが・・・ If IsDate(txt.Value) = False Then MsgBox "有効な日付ではありません。", vbCritical, "日付エラー" txt.SetFocus Exit Sub end if これでtxt.Valueに19991212が入っていて エラーメッセージが出てしまうのは何故なんでしょうか?
"1999/12/12" "1999-12-12" "H11/12/12" "H11-12-12"
615 :
613 :2005/07/11(月) 12:38:59
レスどうもです。 /や-が入っていないと そもそも日付として認識してくれないんですね。
>>612 もう解決したようだけど・・・。
inputはVBA内部コードへ文字コード変換が入るのでバイナリには使えない。
バイナリを読む場合は、inputbを使用してbyte配列に読み込む。
dim hoge() as byte
hoge=inputb(...)
617 :
566 :2005/07/11(月) 17:37:40
完全に放置されてる566です。
どなたか
>>566 にも回答をお願いします。
>>617 excelは詳しくないけど、hasarrayかな?
Left(Range("a1").Formula, 1) IsNumeric(Range("a1")) TypeName(Range("a1").Value) VarType(Range("a1").Value)
620 :
566 :2005/07/11(月) 18:49:01
621 :
デフォルトの名無しさん :2005/07/12(火) 13:51:58
質問です。 テキストボックスの値をSQLでデータベースに入れようとしています。 str型変数を入れるテキストボックスなら 空欄のままでも気にせずデータベースに突っ込めるんですが、 int型変数を入れるテキストボックスだと 何かエラーになってしまうみたいです。 INT型のテキストボックスからは データベースに空欄を入れられない仕様なんでしょうか?
自分だったらそこで、(LPC(T)STR)の型変換試してみたい気がする
>>621 SQL 的にそうだよ。
CHAR型なんかで VALUES ("") は可。
INT型とかで VALUES () は不可。
初歩的な事ですがご教示下さい。 各セルの中に文字列が入っていればメッセージを出す下記のようなスクリプトを書いてい ます。 If Range("a1").Value <> "" Or Null Then MsgBox "月曜日1" End If If Range("b1").Value <> "" Or Null Then MsgBox "月曜日2" End If If Range("c1").Value <> "" Or Null Then MsgBox "月曜日3" End If こんな調子で書いていくとif〜end ifが延々と繰り返されて何だか不細工に見えます。 これをもっと見やすくまとめるにはどうすれば良いのでしょうか?教えて下さい。
どういうメッセージを出したいの? Aが空欄の時、「空白です。」,Bが空欄の時、「空白です。」・・・ と言ったような決まったメッセージを出すのかな? それとも、 Aが空欄の時、A, Bが空欄の時、B・・・ といった1つの条件に1つのメッセージを出すのかな。
>>624 その例通りなら
dim i as long
for i = 1 To 3
If cells(1, i).value <> "" Then MsgBox "月曜日" & i
next i
メッセージパターンが1,2,3じゃないなら、最初にメッゼージ内容を配列にでも入れておけばいい
ついでにこの場合Nullは要らないし、更にifステートメント内でのorの使い方も間違ってる
627 :
デフォルトの名無しさん :2005/07/13(水) 21:20:48
msgboxやlabel内の改行方法がわかりません。 どなかた教えてくださいorz
msgbox→vbcrlf labe→知らん。俺は幅の調整とスペースとかでやりくりしてたけど。
629 :
624 :2005/07/13(水) 21:50:25
>>625-626 レス有難うございます。
Aが空欄の場合はメッセージは出ないようにしたいと思っています。
いまテスト環境から離れてるので後で試して見ます。
有難うございました。
>>627 それは俺でも分かる。
↓な感じでどうですか?
msgbox "test" & vbLF & "test2"
labelは知らない。同じような感じでダメ?
630 :
624 :2005/07/13(水) 21:51:35
あ、vbcrlfでしたっけ?申し訳無い
vbCr
vbNewline の方がいいと思うな。 環境に左右されない。
環境って。。。 VBA使うのはWinとMacだけでしょ。 ならcrでもcrlfでもlfでも問題ないだろ。 msgboxではなくテキスト出力ってなら話は別だけど。
634 :
デフォルトの名無しさん :2005/07/13(水) 22:27:27
皆さんありがとうございました。助かりました!!
635 :
621 :2005/07/13(水) 23:17:04
また新たに質問です。
レコードの中に
[ID,"1","1","0",999,999,NULL] (NULLは文字列「""」で入れたもの)
のように入っているんですが、
IDでSELECTして持ってこようとすると
「1つ以上の必要なパラメータに値がありません」
と言われてしまいます。
NULLがまずいのかと思って
COALESCE(列名,0)とかやってみましたが
「オートメーションエラーです。エラーを特定できません」
と返されてしまいました。
NULL入りのレコードをどうやって持ってくればいいのでしょうか?
>>623 どうもです。
SQL側の仕様だったんですね。
>>622 こちらに対するレスなのかどうかよく分かりませんが、
LPC(T)って何でしょうか?
ググってみたけどヨクワカラン・・・。
636 :
デフォルトの名無しさん :2005/07/14(木) 00:49:04
フォルダにエクセルファイルが30個くらいあるんですけど 全ファイルのデータを取得し、1つのCSVを作成ってできますか?
638 :
636 :2005/07/14(木) 01:31:36
方法を教えてください
>635 データベース何使ってんのかしらねーけど、 Nullだったら、他の値を入れるようにSQL文書けばいんじゃね? ACCESSね SELECT IIF( ISNULL(a),"a","B") AS test FROM テーブル1;
>>635 Access かな? VBAの問題じゃないと思う。
Access で直にSQLを打ってみて、使えるSQL文をVBAに使えば?
>>638 一つ一つのファイルを開き、データを取得し、一つのCSVに書き出します。w
>>638 For内でWriteやPrintを使って1行目からデータ下端行までをCSVに書き出し
をForで全シートに操作、をDoとDirでフォルダ内の全ブックに操作。以上。
方法は教えたよ。あ、コード書いてってのはさすがにスレ違いだから。
642 :
デフォルトの名無しさん :2005/07/14(木) 15:22:01
下記のような感じで他のexcelのファイルを読み出すマクロを作っています。 Workbooks.Open Filename:="C:\test\test.xls" test.xlsをバックグラウンドで開きたい(目に見えないようにしたい)のですが、 どうすれば良いのでしょうか? ↓ではダメでした。 Application.ScreenUpdating = False またマクロから別に作成したbatファイルを実行したいのですが、どうすれば 良いのでしょうか?
OSが日本語なのか英語なのかって調べられない?
Private Declare Function GetLocaleInfo Lib "Kernel32.dll" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long Private Const LOCALE_SYSTEM_DEFAULT = 2048 Private Const LOCALE_SENGLANGUAGE = &H1001 ... GetLocaleInfo LOCALE_SYSTEM_DEFAULT, LOCALE_SENGLANGUAGE,・・・
片思いの相手に彼氏いるのかどうかって調べられない?
646 :
635 :2005/07/14(木) 19:12:37
レスどうもでした。 長いSQLをごっそり切り落として 問題の箇所だけ色々書き方を変えて試行錯誤してたら なんとか予定通りに動いてくれました。 どうやら最初動かなかったのは 単純な記述ミスも混じってたっぽいです・・・。
647 :
デフォルトの名無しさん :2005/07/15(金) 16:26:03
ワードで、エクセルのApplication.GetOpenFilenameみたいに ファイル参照する方法はありませんか? ワードしかない環境を想定しているので、エクセルを呼び出して利用することが出来ません。
Dim buf As String With Application.FileDialog(msoFileDialogFilePicker) If .Show = True Then buf = .SelectedItems(1) End With Msgbox buf,,"ファイルパス" ってのはダメですか?
649 :
647 :2005/07/15(金) 17:00:10
>>648 すいません、ヴァージョンを書かなかった私のミスです。
word2000以上を対象にしてるんで、Application.FileDialogが使えないんです。
これってxpになってからのメソッドですよね。
650 :
647 :2005/07/15(金) 17:16:16
自分なりに調べてみました。 某掲示板の過去ログに Dialogs(wdDialogFileFind) っていうのを見つけたんですが、 参照ダイアログ(みたいな窓)は出るものの、値を取得する方法が分かりません。 これって使い物にならないんですかね。
"Dialogs"で検索すれば、いくらでも解説してるところはあるわけだが。
652 :
647 :2005/07/15(金) 17:58:30
>>651 もちろん調べてみました。
でも、エクセルのことばっかりで、ワードって以外とないんです。
探し方が悪いのかな。
やる気無しか。
656 :
642 :2005/07/15(金) 20:22:21
>>642 ですが、誰か分かる人いませんか?
知りたいのは下記二点です。
1. マクロから別のエクセルファイルをバックグラウンドで開きたい
.visible=falseとか使ってもうまくいきません。使い方が悪いのかも?
2. マクロから別に作成した.batファイルを実行したい。
どちらかでも分かる人がいたら教えて下さい。ヒントだけでも結構です。
宜しくお願いします。
>>656 1. 非表示ではなくバックグラウンドなら、他のブックをアクティブにすればいいだけでしょ。
まあ、ブックを非表示で開く方法は、マクロウィルスに使えるテクなので聞かれても答える訳にはいかないが。
2. 普通にShellで呼べばいいだけでしょ。その方法くらいは自分で調べようね。
1.Shellexecute()関数 2.system()関数 て、VCなんだけど、VBで使えたかな・・・
659 :
656 :2005/07/15(金) 21:10:10
>>657 レス有難うございます。
1. すみません。非表示にしたいのです。書き方が悪かったですね。すみません
2. ぐぐってるんですが中々ヒットしません。「VBA bat」などの気^ワードで調べてる
んですけど。。。もうちょっと調べてみます。
有難うございました。
>>658 これは私宛のレスですか?高度なので意味が分かりません。ちょっと調べてみます。
有難う。
WindowsのVBAで作ったマクロって、マックで使えますか?
> 「VBA bat」などの 別にbatに限ったことじゃないでしょ。 普通に他のアプリに引数渡して起動する方法を調べればいいだけだよ。 まあ、1の方は回答貰うのは諦めよう。やりたければご自分で。
665 :
デフォルトの名無しさん :2005/07/16(土) 01:41:38
リファレンス的な本だとどれがお勧めですか? 心の広い人、教えてください
ヘルプ
心の広い人 と書けば、スレ違いの質問にも答えて貰えると思ってるのかな?
>>665 あえて言うと、Office2000よりもOffice2003の方が
オンラインヘルプの仕上がりがよいみたい。
こんばんわ。おせわになります。
ファイル操作についてお教えください。 読み取り専用のままでファイルを配布して、ファイル名の変更など されても読取専用のままにしたいのです。 実際にファイルをダブルクリックして開くのもマウスの左ボタンで ファイルのプロパティからプロパティを変更するのもどちらも開くに なるのでしょうか?プロパティから読み取り専用属性を変更したら これはファイルを開いたことになるのでしょうか?
(`・ω・´)プンプン!
674 :
デフォルトの名無しさん :2005/07/17(日) 04:18:02
モジュール全体に対して比較モードを「テキストモード」に設定されている中、 「ひらがな」と「カタカナ」だけは区別したい場合ってどうすればいいんでしょう? もしそれ用の関数等を作成しなければいけなかったりしたら死亡なんですが・・・。(;´Д`)
675 :
デフォルトの名無しさん :2005/07/17(日) 12:27:39
ヘルプが英語で書かれている場合みなさんはどういう対処をしているのでしょうか? 教えてください。
>>674 かなとカナが混じってる場合はどうする?
678 :
デフォルトの名無しさん :2005/07/17(日) 12:42:22
マルチってどういう意味?
糞厨房って意味さ
680 :
デフォルトの名無しさん :2005/07/17(日) 14:39:59
681 :
674 :2005/07/17(日) 14:52:00
>>677 そっかー。ってっことはやっぱ関数作んないといけないってことですな。
ありがとー
683 :
デフォルトの名無しさん :2005/07/17(日) 19:32:22
実行を一時停止させる方法について質問なんですが、 ・1/1000秒単位で指定できる。 ・停止中CPUを喰わない ・停止中シートやユーザーフォームの操作が出来る の3つを満たしてる方法って無いですか? OnTimeやWaitは1秒単位だし、APIのSleepは操作が出来なくなる。 Timer関数を使ってループを組む方法はCPU喰いまくり。 何か他に良い方法は無いのでしょうか?
684 :
cプログラマ :2005/07/18(月) 19:12:01
for文について c言語:break →VBA:exit for だが c言語:continue→VBA:??? continueってVBAではなんなの?
686 :
cプログラマ :2005/07/18(月) 19:16:43
代用法ならあるけどね。
>>687 代用方おしえてちょ。
For cnt = 1 To 100
wkCelVall = Cells(cnt, 1).Value
If wkCelVall = "" Then
★★★ここでcontinueしたい!
Else
Cells(cnt, 1).Value = ""
End If
Cells(cnt, 1).Value = "aaa"
Next cnt
goto
gotoと来たか。まさかとは思っていたが・・・ 使うしかないか。
>>688 つーか、その例通りなら、
If文ちょこっと弄るだけで済むやん。
つーか、Elseの場合
>Cells(cnt, 1).Value = ""
としても、直後に
>Cells(cnt, 1).Value = "aaa"
ってしてたら意味無くないか?
おまえ、本当にマなの?
それとも情報小出しにしてるとか?
つまり情報小出しか
GoTo Continue
688 の例なら、IFをうまく使えばいいことになるな。
696 :
デフォルトの名無しさん :2005/07/19(火) 19:03:22
スレ違いかも知れませんが、知ってる方がいたら、教えてください。 エクセルマクロで特定の文字列を置換し、セル中の置換後文字列のみを太字や斜体にしたいのですが。 セル全体は出来るようですが、一部分の変更が上手く出来ません。 また、置換後の文字列の長さは不特定なので、桁数指定も出来ません。 すみませんが、よろしくお願いします。
699 :
698 :2005/07/19(火) 20:05:29
追記:このページは検索処理が乗っていた。置換処理にすると ちょwwwww よろ。
>>688 C言語の事はよくわからんが
Exit Forじゃ、駄目なのか?(Forステートメントを途中で終了)
ちなみに、VBAにはExit Doやら Exit Subやら Exit Function End Ifとかある On Error GotoやらResume,Resume Nestやら・・・ C言語にもあると思うが・・・ 見当違いだったらスマン
>>700 私は688じゃないけど、
continueは「一回だけ」下流の処理をとばして、次のFor〜Nextをまわす処理です。
Exit Forでは、For〜Next処理全体が終了するので、代用にはなりません。
For 処理 ┌──Exit For │┌─continue ││ 処理 │└→ │ next └─→
>>702 なるほど・・・VBAにはもしかしたらcontinueの代わりは無いかも
自分ならその場合は
If cnt <> 1 Then
とか
If wkCelVall = "" and cnt > 1 Then
とかでで切り抜けるかな・・・
705 :
デフォルトの名無しさん :2005/07/21(木) 10:09:10
すみません。 ExcelVBAでArrayListを使いたいのですが、デフォルトではコンパイルが通りません。 アドインすればいいのかと思うんですが、ヘルプを読んでも、オブジェクトブラウザを 検索しても、ArrayListのキーワードではヒットせず、ぐぐっても、見つかるソースでは 当たり前のように使っているため、困っています。 何を引っ張ってくれば使えるようになるんでしょうか? ご教授願います。 OSはWindows2000、Excel2003です。
頼むから If 〜 Then は括弧で囲んでくれ・・・
>>705 まず、ArrayListとはどう言った物かを
コードなりを踏まえて説明しないといけません。
>ArrayListのキーワードではヒットせず
私の頭の中でもヒットしません。
おそらく、誰の頭だろうがヒットしないでしょう。
……何か勘違いしてると思うよ。
君の中でのArrayListとは何か、まず説明しなさいって……
ArrayListって.NETでしょ。 VBAで使えるなんて話、聞いたこともない。 個人的な自作関数名や変数名として "ArrayList"という名前を使ってる奴とかは居るかもしれないけど。
>>708 なるほど、じゃあ検索してヒットしたのは、多分.NETのサイトなんでしょうね。
とりあえずVBAでは使えないということが判ったのは助かった。
自作しますわ。
検索してヒットするのはJavaはJScriptのようですが、、
Outlook.ApplicationでメールアイテムのSentOnが取得できないのは どんな場合でしょうか。
712 :
デフォルトの名無しさん :2005/07/22(金) 09:58:06
rangeオブジェクトからブック名を知る方法を教えて
特に指定しなかった場合はThisWorkbookでしょ。 ActiveCellやActiveSheet.Rangeの場合はActiveWorkbook。 別に調べるまでもないと思うが。
714 :
デフォルトの名無しさん :2005/07/22(金) 16:28:13
EXCEL2000でコントロールIDを使って右クリックメニューに 値を貼り付け(369)や書式を貼り付け(370)を追加しているんですが 「罫線以外を貼り付け」にもコントロールIDがあれば教えてください
自分で調べろ。 その二つが調べられるなら簡単だろ。
716 :
デフォルトの名無しさん :2005/07/22(金) 20:00:06
あるの?
な・い・しょ
718 :
デフォルトの名無しさん :2005/07/22(金) 20:33:53
ExcelのVBAでprivate Subに一度に渡せる引数の数は 最大何個までになるんでしょうか?
配列渡しできない?
720 :
718 :2005/07/22(金) 21:05:17
721 :
物好き :2005/07/22(金) 22:10:17
わからないから教えてじゃ教える気にならんのはわかるし、スルーすべきなんだが・・・。
まあ、展開が嫌なので知らないの含めて答えると
>711
知りませんので答えるべきではないのですが・・・。
なぜ知りたいのかわからんのでなんともいえませんが
エラーになるメールのメールヘッダ調べれば分かるのでは?
>712
Rangeオブジェクトの親の親はWorkbookオブジェクト
まあ、713さんの答えであってるのですが返答がないので一応。
>714
ttp://www2s.biglobe.ne.jp/~iryo/2vba/sankou.html にのってるな。まあ確かに調べればすぐわかります・・・。
>718
最大何個までかは知りません。
ただ、ParamArrayキーワードを使えば、何個だろうとかまわんはず。
XXをしたいのですが○○という条件があって・・・とか書けば返答できるけどなあ。
まあ、スルーすればいいのだが・・・。
何をしたいから、教えてくださいとか書かないし、
結果も書かないしなあ。分からんとしても調べた結果を書いてほしいと思う。
まあ日本人以外にそれを求めるのは・・・。
日本人じゃないの? カナーリ馬鹿な部類のほうだと思うけど
すいません。
>>711 ですがどなたかご存知ないでしょうか。
VBAなんですが、エラーが発生した行番号を知りたいときはどうすればよいので しょうか。 on error goto〜だと、どこでエラーが発生したか分からないので不便です。 java とかみたいに、try catchみたいな構文ならいいのに。
Erl つーかtry catchも構文自体は、どこでエラーが発生したか わからんけどな。
726 :
デフォルトの名無しさん :2005/07/24(日) 20:25:15
文字列をDouble型に変換するってどうすればいいのですか? 整数みたいにCIntとかないみたいなんですが。
727 :
デフォルトの名無しさん :2005/07/24(日) 21:06:08
ちょっと気になったのですが、VBA.NETってないんですか? 今ないなら、今後出るということはないのですか?
今は無い。 今後のことはMSに聞け。
729 :
726 :2005/07/24(日) 22:08:51
>>728 ないんですか?
自作しないといけないんでしょうか?
730 :
デフォルトの名無しさん :2005/07/24(日) 22:31:32
>>731 お前らの回答が遅いから結果的にはそうだな。
はいはいわろすわろす
734 :
デフォルトの名無しさん :2005/07/26(火) 01:48:14
同じ形式の複数のデータファイル(xls)があります。 それを1つのファイルにまとめたいんですが、本を読んでもさっぱりわかりません。 具体的には1つのファイルに、縦に位置をずらしながら他のデータをコピー&ペーストしたいのです。 ヒントでもかまわないのでよろしくお願いします。
>>734 1.ファイルを開く
2.コピーする
3.貼り付けする
4.ファイルを閉じる
5.1に戻る
>>735 即レス感謝でつ。
でも2.でコピーするファイルと3.で貼り付けるファイルが違うんですよね。
あとそこがわかればなんとかなりそうです。
Excel.Workbook Excel.Worksheet
すみません。少しスレ違いかもしれませんが 複数のエクセルファイルをドラッグアンドドロップして いずれのファイルからも特定のセル (例えば5枚目のシートのE12みたいに) からデータを拾ってきて、1つのエクセルファイルに 出力するようなツールを作りたいのですが そういうのってAccessで実現できるのでしょうか? また、出来るとしたらどうすればいいのでしょうか? よろしくおながいします。
740 :
デフォルトの名無しさん :2005/07/26(火) 07:12:09
すみません。少しスレ違いかもしれませんが 複数のエクセルファイルをドラッグアンドドロップして いずれのファイルからも特定のセル (例えば5枚目のシートのE12みたいに) からデータを拾ってきて、1つのエクセルファイルに 出力するようなツールを作りたいのですが そういうのってAccessで実現できるのでしょうか? また、出来るとしたらどうすればいいのでしょうか? よろしくおながいします。
741 :
デフォルトの名無しさん :2005/07/26(火) 09:42:10
初心者です。 本をみながらマクロを書きブックに戻って実行したら デバッグとなり黄色くなってしまいました。 しかも消えない。 た す け て
>>741 それはマクロにエラーがあるってことだ。
メニューの「実行 > リセット」で元には戻るけど
コードを見てない俺等では、エラーが出ないようにする方法は教えられない。
>>742 ありがとうございます。
リセットできました。
ダブルクォーテーションとか()って、大文字小文字は正確に
打たないとだめですよね。
みなさん、いちいち「半角全角」キー押すの
めんどくさくないですか?
慣れちゃえば身体が自然に動くんですか?
大文字小文字は関係ないだろ。 全角半角の間違いじゃねーか? 俺は日本語文字列入れるところはNullのままにしておいて 後から入力することが多いな。 1. msgbox "",vbokonly,"" 2. IME ON 3. msgbox "おはよう",vbokonly,"" 4. msgbox "おはよう",vbokonly,"あいさつ" みたいな感じで。(この場合vbokonlyは省略できるけど)
>>744 ありがとうございました。
ナイスな方法ですね。
わたしもそのやり方でやってみます。
が、初心者なのでまとめて後入力だと
日本語で何を入れるのか忘れそうで恐い。
その前に日本語を忘れてしまいそうです
初心者なのでVBAをやるためにどんなPCを買えば良いかも教えて下さい。 ついでにどこで買うのが安く、しかも初心者にも優しいのか教えて下さい。 皆さんはどんな風に勉強したんですか?初心者にも分かりやすく教えて下さい。 よろしくお願いします
> 初心者なのでVBAをやるためにどんなPCを買えば良いかも教えて下さい。 今売ってるWinかMacなんでもOK Pen 66MHz RAM16MBなんてPCでも、普通にVBA使えるから > ついでにどこで買うのが安く、しかも初心者にも優しいのか教えて下さい。 VBA関係ないのでスレ違い > 皆さんはどんな風に勉強したんですか?初心者にも分かりやすく教えて下さい。 「解らなければ人に聞けばいい」という考え方を捨てることが勉強の第一歩です 以上 あとは勝手にがんがれ
>>749 そこは夏厨じゃない奴が夏厨になりきって遊ぶスレだぜ
本物の夏厨を誘導してどうするw
ヒント:ここは釣り堀
752 :
デフォルトの名無しさん :2005/08/02(火) 22:48:45
CrystalReport で、明細部分を繰り返し印刷することが できますけど、Access VBAのフォームにも同様の機能 があるんでしょうか? 現在、Access VBAの業務系ソフトをVB.NETに移植 しようとしているのですが、VBAの方で、ひとつの レコードが複数の行に渡って記載されているリスト コントロールのような表示になっておりまして、 これをどうやって移植したらいいのかと思っています。 これはAccess VBA独自のコントロールなのでしょうか? VB.NETでは使えませんかね?
ExcelVBAよりバッチファイルを実行したいのですが、 うまくいきません_| ̄|○ Dim oShell As Object Dim oExec As Object Set oShell = CreateObject("WScript.Shell") Set oExec = oShell.Exec("C:\test.bat") 教えてください |ω・`)
call shell("C:\test.bat")
即答・・・ ありがとうございます!!(´∀`)
756 :
デフォルトの名無しさん :2005/08/04(木) 19:45:56
Excel2003で文字列の中に半角カタカナが含まれてるかどうが 判定したいんですが、どういう感じで書けば可能でしょうか?
文字列 Like "*[ヲ-ン]*" 半角カナが含まれてればTrue 含まれてなければFalse になると思うが。
すいません。 教えてください。 任意のExcelブックのシートに図が一枚だけ貼りつけられているのですが、 その図を削除したいため、オブジェクト名を取得したいのですが、 どのようにすれば取得できるのでしょうか? ActiveSheet.Shapes(XXXXXXXX).Select Selection.Delete
ActiveSheet.Shapes(1).Delete
あ、名前の取得は↓ね。 ActiveSheet.Shapes(1).Name
761 :
758 :2005/08/08(月) 19:54:57
ありがとうございます!! (*´Д`)
word2002/2003を使用しています。 自分でコマンドバーを新しく作る方法は分かったのですが、 そこにオートシェイプの「直線」と「四角形」のボタンを追加する方法が分かりません。 どなたか教えてください。
普通にやれば出来る
VBAに関係したことなのか。
766 :
762 :2005/08/10(水) 13:50:39
wordなんすけど。
>>766 大丈夫。Wordの質問でもちゃんと答えてくれるはずだって。
>>767 いや、そのスレ最近イイふいんきだけど、さすがにそこまで甘くないだろ。
それに前スレでもそうだったけど、偶にものすごく荒れるし。
>>762 ほんとの事を言うと、
あなたの質問に答えられるほど、
ここの住人はレベルが高くないんです。
だれも模範解答を提示できないから、
なんだかんだとお茶を濁すぐらいしかすることがない。
全ての人が自分と同じレベルだと思わない方がいい それとID出ないからといって自演はほどほどに
>>766 468 名前:名無しさん@そうだ選挙にいこう[sage] 投稿日:2005/08/10(水) 17:55:32
>>466 「ユーザー設定」ダイアログを表示した状態で、分類「オートシェイプ」
を選ぶ。後はそこに表示される「直線」だの「四角形」などのボタンを、
自作のツールバーにドラッグ&ドロップ。
VBAって基本的な部分は97から変わってないですか? 97の参考書買おうと思うんですけど
基本的な構文規則とかは変わってないけど 関数とかメソッドとか結構増えてるよ というか、今頃97対応版買っても仕方ないと思われ 最低でも2002、できれば2000〜2003対応のを買え。
そうなんですか ありがとうございます
Excel2003です。お教えください。 練習問題みたいのを(例えば新規ブックを開く、とか)ツールバーに登録しています。 それで新たに作ったプロシージャをいつものように登録したんですが 「マクロ 'PERSONAL.XLS!セルA1の値を取得、表示する' が見つかりません。」 とアラートが出てしまいます。 ただし、VBEの中から 実行>Sub/ユーザーフォームの実行 を行うとアクティブシートのA1の中身を表示します。 また、以前作ったものを新しいボタンに登録すると、例えばアクティブシートを削除、ならその通りに動きます。 一体なにがいけないのでしょうか? よろしくご教示ください。よろしくおねがいします。
>>777 了解です、誘導ありがとうございました。
779 :
デフォルトの名無しさん :2005/08/16(火) 09:55:21
みなさんこんにちは、 OfficeXP DeveloperでCOMアドインの作成にチャレンジしているのですが、これはいったい? と思う出来事に困っています。 AddinInstance_OnConnection時にUserFromを表示させるようにコードを書いたところ。 スタートボタンからExcelを起動したときは問題ないのですが、関連付けられた「*.xls」ファイルを ダブルクリックして起動した場合は、UserFormを閉じた後ワークシート上でのキーボードの入力を まったく受け付けなくなってしまって困っています。Altによるメニューの表示や、セルを ダブルクリックした後のデータ入力等は可能ですが、それ以外はまったくキー入力が 無視されてしまいます。(方向キーによる選択セルの移動や、セルへの直接データ入力、 Ctrl+PgUpによるシートの表示切替など)これって回避できるのでしょうか?
>>779 >男の顔が突然歪んだ。それに合わせるように、その腰の動きが単調で乱暴になり、そしてより激しくなっていく。
まで読んだ
>>779 > 自分の一番深い所で男の精液が爆発した瞬間、キャミィは目を剥きながら心の中だけで絶叫した。
まで読んだ。
>>779 > 突然、「ひっ。」と妻の声が中からしました。今から思えばきっとこの時パン
まで読んだ。
783 :
デフォルトの名無しさん :2005/08/17(水) 01:32:55
784 :
デフォルトの名無しさん :2005/08/17(水) 09:37:11
Excel2000です IEコンポーネントなのですがこちらでよかったでしょうか? 伺いたいのはIEコンポーネントでフレーム(2つに分かれています)のあるページを開いているのですが、 どちらか片方のページが開いたら次の処理を行う ということをしたいのです(もう一方のページが開くのがすごく遅いのでその間に別の処理をしてしまいたい) IE.Busy が終わるのを待っていると両方共のページが開くのを待たないといけませんが 片方が開いたというのを分かる方法はありますでしょうか? フレームのページは自分で作っていますので、IE.document.frames("namae") みたいな感じになっています よろしくおねがいいたします
ほんとにあほみたいな質問なんですが、お答え願えるでしょうか。 商品A コメント 100円 を 商品A コメント 100円 という風に別ブック別シートに並べたいのですが分からなくて弱ってます。 Sub xxx() Dim myOriginal As Integer Dim myCopy As Integer For myCopy = 1 To 3 For myOriginal = 1 To 3 Cells(5, myCopy).Value = Cells(myOriginal, 1).Value Next myOriginal Next myCopy End Sub なんとなくこんな感じの入れ子になるような気はするのですが、どこが間違ってますでしょうか? 教えていただけませんか、お願いします。
なんとなくできました! myOriginal = 1 For myCopy = 1 To 3 Cells(myCopy, 5).Value = Cells(1, myOriginal).Value myOriginal = myOriginal + 1 Next myCopy ここから改良するつもりです。お騒がせ致しました、すみません。
>>784 WSHスレの方が詳しいような気がするけど、どこに持っていってもそれに詳しい人を待たないといけないかな。
前はIEコンポのスレがあったんだけどね。
790 :
デフォルトの名無しさん :2005/08/17(水) 18:45:11
すみません、教えて下さい。 Dimステートメントで定義した、2次元配列を、 1次元目をキーにソートしたいのですが、可能でしょうか。 よろしくお願いします。
>>790 可能
といっても一発でソートするようなメソッドとかが有る訳じゃない。
VB、VBAにはソート機能は無いので、ソートの汎用アルゴリズムを使うか
ソート可能なコントロールを使い、そのコントロールのメソッドでソートするかだな。
VBAの場合、二次元までの配列をソートする一番簡単な方法は
シートに書き出してオートする方法。だが、これを嫌う奴は多いので、
これがイヤなら自分で書け。
といっても腐るほどサンプルが転がってるから苦労はしないと思うが、
サンプルくらい自分で拾ってこいよ。
一発でソートできる方法ってなかったけ? 97以前のメソッドの名残を使える方法があったような。 時間がないので調べてないけど。
Excelのマクロについて質問です Sheet2のみ、Sheet3のみの内容をコピーし、新規のbookを作成し、そこにペーストする方法はわかる のですが、Sheet2からSheet5までをまとめて新規のbookにペーストする方法がわかりません どなたかよい記述方法をアドバイスしていただけないでしょうか
まとめてやろうとするからできないんだよ。 処理を個別にしてループ回せばいいだけのことなのに。
795 :
793 :2005/08/17(水) 19:23:47
>>794 やはりそれが一番ですか
アドバイス有難うございます
Excelマクロ(VBA)について質問です。 処理実行後、エクセル自体を終了させたいのですが、 ActiveWorkbook.Close SaveChanges:=False ActiveWindow.Close SaveChanges:=False のどちらを試してみても、エクセルブックは閉じるのですが、 エクセル自体は終了してくれません。(ブックが何も無い状態でアプリがそのまま残っている) 恐らく、アプリ自体を終了するような方法があると思うのですが、 調べ方が足りないのか、方法が見つかりません。 どなたかご指導をお願いします。
Application.Quit
798 :
796 :2005/08/18(木) 16:03:31
>>797 ありがとうございます。m(_ _)m
とりあえず、アプリを終了する事はできそうですが、
「保存しますか?」のアラートが出てしまいます。(保存はしたくありません)
ActiveWindow.Close SaveChanges:=False
Application.Quit
と2段階で行う事も試しましたが、
ワークブックを閉じた段階で、次の命令文が実行されないみたいで、
(当然といえば、そうなのかもしれませんが)
結局、前と同じ状況(アプリは終了しない)になってしまいます。
何か、良い方法ってないのでしょうか?
Personal.xls つーか聞くことしか考えてないの? Application.Quitだって「VBA "Excelを終了する"」とかでググれば腐るほど出るぜ。 ちっとは自分でやる気になってみろよ
800 :
796 :2005/08/18(木) 16:27:52
>>799 申し訳ないです。
これでも昨日から、ググりつついろいろ試していたのですが・・・
検索の仕方が悪く、前段階では Application.quit すら見つかりませんでした。
※ 例に挙げたワークシートやウィンドウの閉じる方法しか見つかりませんでした。
とりあえず、Personal.xls 試してみます。
>>798 逆にする。
Application.Quit
ThisWorkbook.Close SaveChanges:=False
Application.DisplayAlert = Falseだっけか? 慣れてる人ならまだしも、ネットで全部済ますのは無理があると思うよ 逆引き大全の類は1冊持っておいた方がいいと思う
ユーザーフォーム上のコンボボックスを2段式にして、2段目のRowsouceを変数を使って制御したいのですが上手く行きません。 ご指導お願いします。 Public Sub UserForm1_Initialize() Public あ As Long, あ範囲 As Range Set あ = Worksheets("シート1").Range("A65536").End(xlUp).Row Set あ範囲= "シート1!B2:B" & あ End Sub Private Sub ComboBox1_Change() Dim う As Integer With UserForm1 .ComboBox2.Text = "" う = .ComboBox1.ListIndex Select Case う Case 0 .ComboBox2.RowSource = "シート1!A2:A10" Case 1 .ComboBox2.RowSource = あ範囲 End Sub
VBAでネットゲームの自動化をしたいんですが参考に出来るサイトや書籍を教えてください
なぜVBAで寝マクロを……
とあるスレで
243 名前:ネトゲ廃人@名無し 投稿日:2005/08/17(水) 20:00:25 ID:???
オレはVBAで!
244 名前:ネトゲ廃人@名無し 投稿日:2005/08/17(水) 20:31:41 ID:???
>>243 おお、同士よ
オレもExcelでVBAさ
データ類は別ファイルとかにしなくてもシートに置いておけるし便利だよね
今日もExcelで造船マクロさ
245 名前:ネトゲ廃人@名無し 投稿日:2005/08/17(水) 20:48:35 ID:???
クォリティタカスwwwwwwwwwwwwwwwwwww
ってなレスが有りまして・・・VBAで作れば一番上手いと思った次第です
> VBAで作れば一番上手いと思った次第です それはVBAを使いこなせる奴が言う台詞だ。 つーかそのスレ、レベル低すぎ。 まあ一番参考になるサイトはGoogle コレをもって他は無い 後々楽したいなら、あとは自分でがんばれ
>>880 ここまで聞いたら駄目かも知れないですけど、どのような検索ワードを入力すれば宜しいでしょうか?
MMO マクロ 作成 VBA ネットゲームとか色々試して居るんですが一向に出てきません
いきなり寝マクロ作る気かよ 図々しいにも程がある いくらVBが使えるだけじゃマとは呼ばれないってほど簡単な言語でも 寝マクロなんてのは素人がいきなり作れるものじゃない 汎用的なプログラミングの基礎から始め、VB(VBA)の構文規則や 関数、メソッドなどの基礎をちゃんと勉強しろ 構文規則はVB(6以前)もVBAも同じだから、VB6の入門サイトでも見てこい とりあえず言語関係全く未経験なら「Visual Basic中学校」あたり行け
VBAで通信制御するとなるとADO.NETとかつかうかもな・・・ でもその前にVBAの基本事項やら構造やら理解しないとなぁ
いや、タイミング合わせてsendkeyするだけだ。
何その最低マクロ
>>803 もうちょっとしっかり勉強したほうがいいよ。
構文がめちゃめちゃ。
Sub UserForm1_Initialize()
ではInitializeイベントが成立しない。
1がいらない。
他も間違ってるところばかりで書ききれん。
全コード書け、って言うのは勘弁して欲しいので、
自分できっちり勉強しなおしてね。
815 :
デフォルトの名無しさん :2005/08/31(水) 21:48:15
age
データの集計で、データ入力シートと集計シートがあります。 入力シートにデータを入れると、集計シートで計算をしてくれるため、集計シートには保護をかけたいと思っています。 そして、そのファイルをネットワークで共有したいと思っているのですが、一人がデータを入力した時、 他の人はExcelを閉じずに、更新ボタンを押せば集計シートを更新できるようにしたいのですが、どのようにすればいいでしょうか? 入力と集計でファイルを分ければいいような気もするのですが、使いまわしたいので、できれば内容にフルパスを 入れたくありません。 ちなみに、データを入力する人間は原則一人です。 よろしくお願いします。
817 :
816 :2005/09/01(木) 18:15:05
すみません、環境を書いてませんでした。 Excel2000で実現できないかな、と思っています。 できれば1ファイルで完結すればいいのですが。
818 :
デフォルトの名無しさん :2005/09/01(木) 22:51:29
質問です A1からF1に入力項目があって、A1からF1まで全て入力済みなら灰色で塗りつぶして A1からF1のどこか一つでも未入力箇所があると塗りつぶしなしをする このようなマクロを作成したいのですが初心者なもので・・・教えていただけないでしょうか。
>>818 何を持って入力されたと看做すのか。とにかく何か文字が入っていればそれで良いのか
自分で条件をまとめなされ。
820 :
デフォルトの名無しさん :2005/09/01(木) 23:15:09
とにかく文字が入っていれば入力済みとなるようにです
818はマルチ
822 :
デフォルトの名無しさん :2005/09/01(木) 23:19:11
>>821 どっちに書いたらいいのかわからんかったから両方書いただけ
人、それをマルチと呼ぶ
824 :
818 :2005/09/02(金) 00:00:12
解決しますた。アリガトン
825 :
デフォルトの名無しさん :2005/09/03(土) 13:01:38
教えてください 例えば、テキストファイルで「あ」と入力したものをバイナリエディタで開くと 16進数で「82A0」と表示されます。 この16進数コードから「あ」を、VBAを使って生成したいのですが、どうすればよいでしょうか。 VBAだと、unicodeならchr関数でキャラクタへ変換できますが、16進数からキャラクタへの変換がわかりません。 よろしくお願いします。 例 82A0 → あ 2バイトの16進数を変換してキャラクタを生成
>>825 Function hoge(code As String) As String
hoge = Chr(Val("&H" & code))
End Function
827 :
825 :2005/09/03(土) 19:13:01
>>826 こんなに早くレスしていただきありがとうございます!
お陰で解決しました。
828 :
ゆみ :2005/09/06(火) 01:26:58
パワーポイントとワードのファイルがどのバージョンのオフィスで作成されたか調べたいのですが VBAでそれは可能でしょうか?
>>828 可能だけどネカマには教えたくない。
名前欄や本文で女っぽい名前を書く奴はほとんどネカマという法則があるからね。
(ほとんどの奴は否定するけど、指摘されてすぐ肯定するくらいなら騙りなんてやらないだろうし)
相手が男でも回答はするけど、俺はネカマの質問には答えない。
だったらスルーすればいいものを。 何か嫌なことでもあったのか。 しかも教えたくないと言いつつ可能だ、と答えてるし。
>>830 スルーすればいいものを。
何か嫌なことでもあったのか。
>>831 スルーすればいいものを。
何か嫌なことでもあったのか。
for ResNo = 832 To 999 call SendRes(">>" & ResNo & vbcrlf & "スルーすればいいものを。" & vbcrlf & "何か嫌なことでもあったのか。") next ResNo
>>833 スルースルスルスルスルルー
何か嫌なことでもあったんた!!!WWW
836 :
833 :2005/09/06(火) 03:00:20
これで合格なのか? 変数は宣言しろとか定型文は定数使えとか SendResプロシージャも書けとか言われるかと思った
837 :
ゆみ :2005/09/06(火) 22:21:50
ありがとうございました。 具体的にはどのようにすればいいのでしょうか? Appkication。Version とかBuildではアプリのバージョン番号が取得されてしまいます・・・
839 :
1 :2005/09/07(水) 01:11:26
ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね ほとんどネカマという法則があるからね
841 :
ゆみ :2005/09/07(水) 22:48:30
MSDNを探してみたのですがやはりわかりませんでした。 教えていただけないでしょうか?
843 :
デフォルトの名無しさん :2005/09/08(木) 00:07:34
一方のパソコンからもう一方パソコンにあるVBマクロをブラウザ経由で 実行させたいのですが、どのようにすれば宜しいのでしょうか。 google等で検索したのですが、ヒントになるサイトがありませんでした。 板違いでしたら、申し訳御座いません。 具体的には、下図のパソコンAがパソコンBのVBマクロを実行する方法です。 HTMLとVBAのソース、少しは読むことができます。 <条件> (パソコンA)--(プロバイダ)--(パソコンB) ・パソコンAはブラウザ起動済み ・パソコンBはブラウザとエクセル起動済み ・パソコンAとBはLAN経由でインターネットに繋がっています。 ・パソコンAとBは上記プロバイダにある同じコンテンツを参照しています。
844 :
けいこ :2005/09/08(木) 00:10:57
>>843 可能だけどネカマには教えたくない。
名前欄や本文で女っぽい名前を書く奴はほとんどネカマという法則があるからね。
(ほとんどの奴は否定するけど、指摘されてすぐ肯定するくらいなら騙りなんてやらないだろうし)
相手が男でも回答はするけど、俺はネカマの質問には答えない。
パソコンBはWebのコンテンツを常に監視し続ける。 パソコンAからWebに命令を書き込み。 パソコンBはWebの命令を読み込み実行する。 こんなプランでどうよ?
つ[VNC]
848 :
843 :2005/09/08(木) 00:48:02
843です。
言葉足らずですいません。
パソコンAがもし、フルブラウザ参照可能な携帯電話の場合、
HTMLの記述はどうすれば良いのでしょうか。
検索して、下記サイトを参照しました。
http://www.tohoho-web.com/lng/199806/98060072.htm 試しに、デスクトップにあるマクロを起動したExcelファイルを立ち上げ、
HTMLファイルに上記サイトの
<a href="./ExcelFile/test.xls">Excelファイル実行</a>
を参考にして、実行したところ、Excelファイルの
ダウンロードまたはファイルを開くのポップアップが表示されてしまいました。
誰か暇だったら教えて 調べてもわからんかったのだけど、 Subとかで引数って、いくつまで渡せる? もしかして、10個で限界とかある?
単純に「sub hoge(arg1,arg2,arg3…」と渡すなら60個まで でもそれ以上の引数を渡す方法もいろいろある。 まあ、大抵は60個じゃ足りなくなることはないので それらの方法は別の用途で使われるんだけどね。 興味があるなら自分で調べよう。
851 :
849 :2005/09/08(木) 03:39:42
>>850 クラスモジュールのSubなんだけど、、
12個だとエラーでて11個にしたら、通ったぽい
でも、60個か...
おかしいなー
やっぱり他のミスが内在してるのかもしれないな
とりあえず、助かりました
さんくす
852 :
ゆみ :2005/09/08(木) 10:02:57
Excel2003 での VBA について質問があります。 Excel の Visual Basic Editor でプログラムを書き、同じく Editor 環境の「Sub/ユーザフォームの実行」でプログラムを実行し、 こちらは常にうまく動作します。 一方、Excel のシートの方に「マクロの実行」ボタンがあるのですが、 こちらからはそのプログラムを起動できる場合とできない場合があります。 できる場合は問題ないのですが、できない場合、 「マクロ」ウィンドウが出てプロシージャ名が表示されるのですが、 「実行ボタン」が無効のままでプログラムが起動できないのです。 このような現象はよくあることなのでしょうか? また、その原因を御教授頂けないでしょうか?
855 :
854 :2005/09/08(木) 13:46:22
どうもプロシージャ名の「ex1」というのが悪さをしてるようで、 プロシージャ名を変えたらシートからでもうまく起動するようになりました。 「ex1」というのは予約語と衝突するとか、何か問題があるのでしょうか?
どうやら A1 形式の EX1 セルを参照してしまっているようでした。 スレ汚し失礼しました。
質問です OS XP SP1 EXCEL2002 シートをPDFに変換するためにPSプリンタでシートをPOSTScriptファイルに出力し POSTScriptファイルをPDFに変換するという手順を踏んでいるのですが Call Worksheets("Sheet2").PrintOut(, , , False, "(Generic PostScript Printer)", True, , "c:\test.ps") でPOSTScriptファイルは出力されるのですがPOSTScriptファイルがよく文字化けしてしまいます。 そのため出力されたPOSTScriptファイルはPDFに変換できません。 プログラムではなく人間が手動でPSプリンタを使ってPOSTScriptファイルを出力させると文字化けをすることはありません。 どうして文字化けを起こしてしまうのでしょうか?
質問です. 2つのCSVファイルを指定して比較し、その差分をC:\tmp\差分.csvに出力 させるにはどのようなプログラムにすればよいのでしょうか?
>>859 二つのcsvを二つの二次元配列に読み込んで
ループ回して比較して、比較結果で条件分岐させて書き出せばいいじゃん。
ここは「コード書いてください」スレではないので具体的なコードは自分で書こうね。
向こうが無用に荒れる原因になるので Excel総合相談所への誘導は止めなさい。 っていうと反抗したい年頃のガキは逆に誘導しまくったりするのかもしれんが。
863 :
ゆみ :2005/09/09(金) 23:49:15
かわいい反抗だなw
867 :
ゆみ :2005/09/10(土) 07:22:48
868 :
ゆみ :2005/09/10(土) 09:41:05
本当にオブジェクトでできるのでしょうか?確認したところ無理であると思いました 厳しい言い方で申し訳ありませんが、よろしくお願いします
869 :
ゆみ :2005/09/10(土) 10:01:24
870 :
ゆみ :2005/09/10(土) 11:12:49
871 :
ゆみ :2005/09/10(土) 15:02:20
全くのプログラミング初心者なのですが、VBAを独学するとしたら みなさんお勧めの入門書とかありますか?
> 勧めの入門書とかありますか? あなたが本屋に行き、読んでみてわかりやすいと思った本 どういう本が合ってるか、読みやすいか、わかりやすいかは人それぞれ というか、VBA程度ならやる気が有ればネットだけで充分独学出来る 逆にやる気がなければどんなに書籍集めてもダメだろう
ExcelVBAなのか AccessVBAなのか WordVBAなのか
875 :
ゆみ :2005/09/10(土) 18:19:39
そろそろ答え書いてもいい?
ダメ
ダメ、絶対。
879 :
ゆみ :2005/09/10(土) 20:03:27
880 :
ゆみ :2005/09/10(土) 21:36:46
自己解決しました
ヽ(・ω・)/ ズコー \(.\ ノ
882 :
ゆみ :2005/09/10(土) 22:01:01
まんこ→× おっぱい→○
884 :
ゆみ :2005/09/11(日) 00:05:32
解決はしていません。茶々をいれるのはそろそろやめてください 本当に助けを求めて書いているのですがどうしてこんな書き込みしかないのですか? もしご存知で親切な方がおりましたらよろしくお願いします
>>884 いい加減、ここじゃ解決しないって学習したら?
>>884 ここまで荒らしたら、もうだれも回答してくれないよ。
888 :
ゆみ :2005/09/11(日) 00:20:07
回答できない方に用はありません。ご存じの方だけレスお願いします。
889 :
ゆみ :2005/09/11(日) 00:31:23
>>886 わかりました、今度MSに問い合わせてみます。
長々とスレ汚し失礼しました。
尚、以後偽者が荒らし続けるかも知れませんが
私はもう一切書き込みませんので放置していただいて結構」です。
↓偽者がトリップ付けて登場
892 :
_ :2005/09/11(日) 07:52:48
わたしは誰?
俺俺
895 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 18:17:33
Excel97とExcel2002のVBAについて質問させて下さい。 Excel97で作ったVBAをExcel2002で実行させると、処理時間が大分遅くなってしまいました。 処理内容、ステップ数でも違うと思うのですが、そんなに変わるものでしょうか? Excelの処理時間で詳しい方がいましたら、回答よろしくおねがいします。
897 :
名無しさん@そうだ選挙に行こう :2005/09/11(日) 18:31:36
おねがいします!教えて下さい!! Access2000で、あるフォーム上にサブフォーム(帳票フォーム)があり、 そこには、バーコードをキーに商品情報を抽出した値を表示させています。 (テキストボックスを配置しています) この時、表示させるある項目を見て、 Aならそのレコードのテキストボックスだけを赤くしたいのです。 色々探したのですが、 条件付書式でできるようなところまでは解ったのですが、 条件付書式をVBAで書く書き方はどこにも見当たりません。 おねがいします!ご存知の方、お願いします! の、の、納期が。。。。 お助けください!
>>896 すみません。せっかく教えだていただいたのですが、
教えていただいたページを見てみたのですが、よくわかりませんでした。
もう少し、詳しく教えていただけないでしょうか?
ム板の方が、Bソフ板より低レベルだなんて....._| ̄|○
レベルが低い上に性格も悪い
902 :
895 :2005/09/11(日) 22:46:51
>>896 すいません。早とちりしてました。
ちょっとスレが違ったみたいですね・・。
誘導ありがとうございます。
MSにも問い合わせを考えて見ます。
VBAなんざプログラム言語じゃねーYO とか思ってる奴が多いんじゃね? マ業界にいるとそれが普通に見えるけど、 事務系でAccessとかExcelとか日常的にバリバリに使ってる連中は 下手なVB厨じゃ太刀打ちできないレベルで使いこなしてたりするから 結構馬鹿にできなかったりする。
>>903 うむ、社内SE何だが大したことしてないけど漏れは神扱いだ。
Excel2003について質問です。 ブックのツールバー[書式設定]にある、[塗りつぶしの色]ボタンの状態(選択された色)を VBAのコード上で取得することは不可能なのでしょうか? セルをある色で塗りつぶすとき、例えば、Selection.Interior.ColorIndex = 15 みたいにしますが、色を示す常数(上記例なら15)を[塗りつぶしの色]ボタンから取得したいと思いまして。 どなたか知っている方がいらっしゃいましたら、お教えいただければと思います。
>>907 やっぱりそうですか。。
色々調べましたが、どこにも見あたらないということはできないんでしょうね。
回答ありがとうございました。
909 :
デフォルトの名無しさん :2005/09/15(木) 13:22:54
ワークシートの名前をそのシート内の某セルにするのができません。 無理なんでしょうかね?
910 :
909 :2005/09/15(木) 13:52:40
VBAでクリップボートにある値をシートの名前にすることができればいいのですが・・・
911 :
デフォルトの名無しさん :2005/09/15(木) 14:04:29
"$D$3"
>>909 無理じゃないからがんがれ。
もちろんマルチするような奴が具体的な回答貰えないことは知ってるよな。
913 :
デフォルトの名無しさん :2005/09/15(木) 14:13:53
worksheets("Sheet1").name=worksheets("Sheet3").range("d3").value
914 :
909 :2005/09/15(木) 14:14:27
昨日できたんですよw なのに・・・忘れた
915 :
デフォルトの名無しさん :2005/09/15(木) 14:17:50
あっ!思い出した! 事故解決の悪寒
916 :
デフォルトの名無しさん :2005/09/15(木) 14:19:01
>>913 の 左辺=右辺を入れ替えてもではますかね?
917 :
デフォルトの名無しさん :2005/09/15(木) 14:23:49
またできなくなった(´・ω・`)ショボーン
918 :
デフォルトの名無しさん :2005/09/15(木) 14:38:02
Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("a1").Value" はできるのですが、 Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("a1:b1").Value" はできません。 つまりa1セルに山田、b1セルに太郎と入力されている場合 Worksheets("Sheet2")の名前が「山田太郎」となればててのですが。 &を使えばうまくいくのかな?
919 :
デフォルトの名無しさん :2005/09/15(木) 14:39:30
>>912 >マルチするような奴
してないってばまさか板違いでもマルチと呼ばれのか? (((( ;゚Д゚)))ガクガクブルブル
> 板違いでもマルチと呼ばれのか? 当然
921 :
デフォルトの名無しさん :2005/09/15(木) 14:50:29
>>920 いちいちチェックするなよw
向こうに書いて後でこっちに気づいたからココに書いたんだよ!
(ry
それはいいとしてセルA1とセルA2を別セル例えばA3に=A1&A2で合体させて
Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("A3").Value
とすればいいのかな?
もう昨日の昼からいろいろやってとてつもない時間使ってるよ・・・
> 向こうに書いて後でこっちに気づいたからココに書いたんだよ! そう言う場合は、最初に書いたスレで質問を取り下げるのが礼儀という物
923 :
デフォルトの名無しさん :2005/09/15(木) 14:57:46
>>922 工エエェェ(´д`)ェェエエ工
最初に書いたスレで質問を取り下げるの???
誰が決めたの?
暇人じゃないんだから
> 誰が決めたの? 2chのみんな > 暇人じゃないんだから そう、皆暇人じゃないんだから、あちこちに無駄な質問ばらまいて 回答者に無駄な時間費やさせるような真似はしないように。
>>905 EXCEL 2000だけど、マウス合わせたときの文字がこうやって取得できるから
一つ一つ変換。 こんなんでOKかな?
Dim cbp As CommandBarPopup
Dim ci As Long
Set cbp = CommandBars.FindControl(ID:=1691)
If cbp Is Nothing Then
MsgBox "見つかりませんでした。"
Else
Select Case cbp.TooltipText
Case "塗りつぶしの色 (自動)": ci = -4142
Case "塗りつぶしの色 (黒)": ci = 1
Case "塗りつぶしの色 (茶)": ci = 53
Case "塗りつぶしの色 (オリーブ)": ci = 52
Case "塗りつぶしの色 (濃い緑)": ci = 51
Case "塗りつぶしの色 (濃い青緑)": ci = 49
Case "塗りつぶしの色 (濃い青)": ci = 11
Case "塗りつぶしの色 (インディゴ)": ci = 55
Case "塗りつぶしの色 (80% 灰色)": ci = 56
Case "塗りつぶしの色 (濃い赤)": ci = 9
Case "塗りつぶしの色 (オレンジ)": ci = 46
Case "塗りつぶしの色 (濃い黄)": ci = 12
Case "塗りつぶしの色 (緑)": ci = 10
Case "塗りつぶしの色 (青緑)": ci = 14
Case "塗りつぶしの色 (青)": ci = 5
Case "塗りつぶしの色 (ブルーグレー)": ci = 47
Case "塗りつぶしの色 (50% 灰色)": ci = 16
Case "塗りつぶしの色 (赤)": ci = 3
Case "塗りつぶしの色 (薄いオレンジ)": ci = 45
Case "塗りつぶしの色 (ライム)": ci = 43
926 :
デフォルトの名無しさん :2005/09/15(木) 15:01:38
質問者と回答者だけなら
>>922 も分かるが、見ているその他多数の人の為なら
質問取り下げるのはどうかね?
ほとんどの人が両方のスレなんて見てないしましてや板違いでっせ?
ダメだな〜
927 :
925 :2005/09/15(木) 15:02:27
Case "塗りつぶしの色 (シーグリーン)": ci = 50 Case "塗りつぶしの色 (アクア)": ci = 42 Case "塗りつぶしの色 (薄い青)": ci = 41 Case "塗りつぶしの色 (紫)": ci = 13 Case "塗りつぶしの色 (40% 灰色)": ci = 48 Case "塗りつぶしの色 (ピンク)": ci = 7 Case "塗りつぶしの色 (ゴールド)": ci = 44 Case "塗りつぶしの色 (黄)": ci = 6 Case "塗りつぶしの色 (明るい緑)": ci = 4 Case "塗りつぶしの色 (水色)": ci = 8 Case "塗りつぶしの色 (スカイブルー)": ci = 33 Case "塗りつぶしの色 (プラム)": ci = 54 Case "塗りつぶしの色 (25% 灰色)": ci = 15 Case "塗りつぶしの色 (ローズ)": ci = 38 Case "塗りつぶしの色 (ベージュ)": ci = 40 Case "塗りつぶしの色 (薄い黄)": ci = 36 Case "塗りつぶしの色 (薄い緑)": ci = 35 Case "塗りつぶしの色 (薄い水色)": ci = 34 Case "塗りつぶしの色 (ペールブルー)": ci = 37 Case "塗りつぶしの色 (ラベンダー)": ci = 39 Case "塗りつぶしの色 (白)": ci = 2 End Select MsgBox ci End If
928 :
デフォルトの名無しさん :2005/09/15(木) 15:04:31
よくガイシュツの質問やスレ違いの質問にムキになる香具師がおるが 第三者の為に書いてやってるんだからな
ガイシュツの質問に文句を言えるのはFAQをまとめている人間だけ
なんかごちゃごちゃしてきたので、ここから心機一転
933 :
デフォルトの名無しさん :2005/09/15(木) 15:09:41
とりあえず漏れの質問を整理しよう。 シート名にA1+B1の名前を付けたい 例) A1=山田 B=太郎 の場合「山田太郎」 C1=A1&B1にしておけば、 Worksheets("Sheet2").Name = Worksheets("Sheet1").Range("c3").Value の記述でできた。 でも別の方法もあると思うのでそれを知りたい
934 :
デフォルトの名無しさん :2005/09/15(木) 15:10:54
論破する奴は嫌い
935 :
デフォルトの名無しさん :2005/09/15(木) 15:11:59
937 :
デフォルトの名無しさん :2005/09/15(木) 15:21:44
学年の1組と3組と4組(これは毎回変わる)の番号n〜m(これも毎回変わる) を抽出させるVBA作るのは相当な知識が必要だろな・・・ これが全クラスの成績トップ10とかだったら簡単だけけうけど はぁ・・・
938 :
デフォルトの名無しさん :2005/09/15(木) 15:31:27
まだ初心者だけど、多分想像するにボタンとか作って ●年○組の成績が上位◎人分を抽出して印刷するとかいうのができるんだよね? さっさと覚えたいが脳が働かるねぇー
組が列方向に、番号が行方向に展開されていて、 指定組の指定番号範囲の値を抽出するとかなら VBAなら簡単だし、VBA使わなくても出せるレベルだけど もっと難しい事を想定してるの?
>>925 おお、これは。。
目から鱗のテクニックです!
これで望んでいる機能を作ることができます。
ありがとうございました。
942 :
デフォルトの名無しさん :2005/09/15(木) 21:23:40
>>939 もちろんそれは分かってる。
わかりやすく例えを学生の成績にしてるが
「全クラスのテストの点数が80点以上の人を抽出」だと簡単だが
「任意のクラスの任意の点数」の場合「任意」が多ければVBAで自動化するのも
あんま意味ないなと思って
943 :
デフォルトの名無しさん :2005/09/15(木) 21:26:12
とりあえず、VBAはまだ始めたばかりです。 やりたいことを日本語で書いて、それをどうPCへ命令すればいいのか考えがおもしろみ でもあり難しさでもあるよな。 とりうえず「この条件まで」「この場合」をマスターしないとな
>>943 ExcelのVBAの場合はWorkbooks,Worksheets,Range,Cellsの基本をマスターすれば
かなり色々なことが出来ると思われ。
テクニックに走らず、基本から少しづつやれば上達は早いと思う。
EXCELでコピーしたエリアを取得する方法ってありますか?
具体的に
>>946 すみませんレスありがとうございます。
VBA初心者です。
簡単なものをサンプル見たりして作っていますが今回書きましたのは
VBAを実行する前に、先に範囲を選択コピーしていた後を想定しています。
クリップボードにあるものを貼り付ける前にどのセル範囲がコピーされていたのか
を確認出来ればと思い投稿しました。
もう少し細かく書くとコピーされていた対象がセル単体なのか・複数セルの範囲なのか
行または列のみなのか等です。
>>947 だから具体的に何を知りたいの?
シート上でコピー時に表示される破線枠の範囲を知りたいのか、
クリップボードのデータが単一セルの物か複数セルのものかを知りたいのか。
君の書き込みは結果ばかり先走っていて状況説明が不十分。
そもそも、範囲選択のみ手動で行い、コピー以降をVBAで行った方が効率良くないか?
範囲選択した状態ならSelection.Addressで選択範囲取れるし。
>>948 すみません、説明が下手糞で・・
>そもそも、範囲選択のみ手動で行い、コピー以降をVBAで行った方が効率良くないか?
まさにそれをしようとしています。
何故コピーの範囲を確認したかったのかというと、貼り付ける場所はSelection.Addressを
使うつもりでした。
たとえば初めにコピーしていた範囲が行で貼り付けようとした場所が列だった場合など
エラーである理由をmsgboxで明確に表示させようと思ったからです。
単にエラーであるのを分岐させるならOn Error Goto・・で出来るのですが、、初めにコピー
をした範囲が明確であればこれを判断させるのも楽だと思いました。
すみません・・補足になります。 >シート上でコピー時に表示される破線枠の範囲を知りたいのか そうです!これです。 もし宜しければご指導お願いします。m(__)m
951 :
ゆみ :2005/09/16(金) 02:40:31
また荒らしが、、、
> 何故コピーの範囲を確認したかったのかというと、貼り付ける場所はSelection.Addressを > 使うつもりでした。 別に貼り付ける場所にSelection使うのはいいけど、コピー範囲でもSelection使えばいいじゃん 例えばこんな感じとか Private Sub CommandButton1_Click() Static hoge As Range If Application.CutCopyMode = xlCopy Then MsgBox "コピー範囲 :" & hoge.Address & vbCrLf & _ "現在の選択範囲 :" & Selection.Address '張り付け処理 Application.CutCopyMode = False Set hoge = Nothing CommandButton1.Caption = "Copy" Else Set hoge = Selection hoge.Copy CommandButton1.Caption = "Paste" End If End Sub
954 :
デフォルトの名無しさん :2005/09/16(金) 12:52:24
VBAで「今コピーしているもの」を貼り付けるには? マクロの場合、上でやってみるとVBAでの記述は「今コピーしているもの」になりますよね? そうではなく、例えばA1セルの値を貼りたいんです。 Name="A1"じゃ「A1」と貼られるしw
>>953 レスありがとうございます。
コピーは主にショートカット(Ctrl+C)を使うので、マクロのコピーにこれを
割り当ててコピーと一緒に選択範囲をPublic変数で持ち越して他のVBAで試す
ところまでは出来ていました。
ただそれをせずに、他にコピーの範囲がわかる方法があるのではと思い投稿
しました。
ヘルプをみたりしてみましたが、現状の自分のスキルではそこが限界みたいです。
どうもありがとうございました。
957 :
デフォルトの名無しさん :2005/09/16(金) 22:31:47
958 :
デフォルトの名無しさん :2005/09/16(金) 22:32:49
Name="A1.value"でもダメなんだよな
> Name="A1"じゃ「A1」と貼られるしw 当然 > Name="A1.value"でもダメなんだよな 当然
960 :
デフォルトの名無しさん :2005/09/17(土) 01:07:39
質問です。 エクセルなんですが 0000 0000 0000 0000 0400 3456 0450 これを 3456 3456 3456 3456 3456 3456 のように4を基準として上方向にそろえるようなプログラム を作りたいのですが、どのようにすればよいのでしょうか? 教えてください。お願いします。
>>960 数値ではなく文字列として扱って
あとはループと条件分岐と文字列操作
VBAのテク的には超初歩的な機能だけでいける
あとのアルゴリズム的な部分はVBA関係なくお前の知能次第
962 :
デフォルトの名無しさん :2005/09/17(土) 02:00:56
>>961 返答ありがとうございます。
しかしながら初心者で低能なため
それらをどう組み合わせていいものかよく分かりません…。
具体的に教えていただけると有難いです
966 :
デフォルトの名無しさん :2005/09/17(土) 10:36:25
919 名前:デフォルトの名無しさん 投稿日:2005/09/15(木) 14:39:30
>>912 >マルチするような奴
してないってばまさか板違いでもマルチと呼ばれのか? (((( ;゚Д゚)))ガクガクブルブル
>>966 間違った時点で質問権失ってますからその通りです。
そもそも板違いじゃないしな
969 :
デフォルトの名無しさん :2005/09/17(土) 13:43:54
shape.nodes は4個単位で座標が帰ってくるのですが、 両端ではない真ん中の2点って、何の座標でしょうか?
970 :
964 :
2005/09/17(土) 22:36:47 >>965 ありがとうございます。
そろえるつもりが全て一番上に行ったり一つだけそろったり
と苦戦してるので行ってきます。