1read 100read
2011年12月2期プログラム3: Excel VBA 質問スレ Part22 (424) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
4: 推薦図書/必読書のためのスレッド 65 (522)
5: スレ立てるまでもない質問はここで 115匹目 (601)
7: Androidプログラミング質問スレ Part16 (228)
8: NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (242)

Excel VBA 質問スレ Part22


1 :11/11/27 〜 最終レス :11/12/24
01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/
15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/
16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/
17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/
18 http://hibari.2ch.net/test/read.cgi/tech/1298240666/
19 http://hibari.2ch.net/test/read.cgi/tech/1305754555/
20 http://hibari.2ch.net/test/read.cgi/tech/1312435844/
前スレ:
Excel VBA 質問スレ Part21
http://hibari.2ch.net/test/read.cgi/tech/1316931607/

2 :
ExcelのVBAに関する質問スレです
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

3 :
初めてスレたてた。
URLとかテンプレとか間違ってたらごめん。
あと、話を遮って質問したけども、関係ない話はやめたほうがいい。
だって、俺がスレたてなきゃいけなくなtt(ry

4 :
>>1

5 :
>>1
前スレの最後はくんが荒らして大変だったねw
ILの直腸注入だったっけ

6 :
まだ、粘着してるよ。
スルー推奨 >> 各位

7 :
愛の直腸注入に付いては俺も聞きたいが
また荒れるからやめとけ

8 :
名前って値が増えても自動で拡張できないけどこれVBA使えばできるよね
やり方教えてくれ
  A
1 100
2 200
3 300
ここで、A1〜A3に「表1」という名前をつける
つぎにA4に、400という数値を入力すると
A1〜A3の範囲だった「名前:表1」が自動的に「A4」まで拡張される
みたいなことやりたいんだけどどうやればいい?

9 :
セルの入力イベントで
名前の範囲をカレントリージョンのものに付け直せば?

10 :
>>8
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = ActiveWorkbook.Names("表1").RefersToRange
If r.Column = Target.Column And r.Row + r.Rows.Count = Target.Row Then
ActiveWorkbook.Names("表1").RefersTo = "=" & Target.Worksheet.Name & "!" & r.Resize(r.Rows.Count + 1).Address
End If
End Sub
とりあえず適当に書いてみた
下に一つ増えるだけ。複数貼り付けとかどうなるかしらん
Worksheet_Changeイベントで、てきとうに範囲決めて、Names().RefersToで設定するだけ
すきな用に直してくれ

11 :
前スレで以下の質問をしたものなのですが
> 変数 X に例えばA1〜A20の数値の和、合計を入れたいのですが。
という質問をして
> X = WorksheetFunction.Sum(Worksheets("Sheet1").Range("A1:A20"))
というアドバイスをいただいたのですが、この一文を経過したあとで、
ファンクションプロシージャで定義された語句を使うとエラーか、上手く作動しなく
なってしまうのですが、なにかそのようなルールがあるのでしょうか?

12 :
質問です。
Offset(,1)とOffset(0,1)ではどちらが一般的でしょうか?

13 :
>>11
うーん。
状況が見えないから何とも言えないけど、
@何か別に理由がある。
A合計対象セル範囲に足せない文字列とかが含まれている。
B合計対象セル範囲がシート枠を超えている。
CILとの直交性
あたりが原因なんじゃないかな。

14 :
>>12
そこを省略しちゃうと、Offset知らない人に
NullやVbNullString辺りが入ることが許されるのか、
勝手に0が入るのかコードから見て取れないから、
前者は余り一般的とは呼べないと思う。
一般的、可読性が高いのは後者じゃない?

15 :
>>12
俺は0は書かないな。
こんな簡単なものに可読性もへったくれもないと思うし。
ところで省略を嫌う人ってResizeで
With Range("A1").Currentregion
  .Resize( ,2)
End With
これを下のように略さずに書くのかな?
With Range("A1").Currentregion
  .Resize(.Rows.Count ,2)
End With

16 :
>>8
Excelのバージョンは?
2007以降ならテーブル(構造化参照)使えばいいんじゃないの?

17 :
「仕事に役立つ ExcelVBA実用サンプルコレクション」の本は大人気。
amazonの中古で売れに売れて、もう高額の出品者からしか買えなくなりました。
すでにレアものです。

18 :
>>12,14,15
一般的って意味が、どう書く人が多いかって話なら
Offset(,1)やResize( ,2) って書く人が多いと思う
可読性に関して言えば、省略しない方が高いのはたしかではあるが
どっちにしろOffsetやResizeが何をするか、引数は何かが解らないと使えないので
大差がないと言えばまあその通り
だがたとえばこの例だと、Offsetは省略した値は0だけど、Resizeは省略した値はゼロではない
俺ならOffsetは0であることを明示的に示しときたいので省略しない
Resizeは変更しないことを明示的に示しときたいので、あえて書かない

19 :
>>17
新装版あるけど

20 :
>>19
新装版のことを言っておるにょだ

21 :
Dim s(0) as String
s(0) = "aaa"
Debug.Print s(0)
これがなぜ通るのか理解できません。

22 :
>>21
どこがどう問題だと思うの?

23 :
>>22
どこがどう問題と思ってると思う?

24 :
>>23
C言語に置き換えたらなんとなくわかるんじゃないか?

25 :
C言語の配列は個数を指定する
VBAの配列はインデックスの最大値を書く
Dim s(1)だとs(0)とs(1)の2個になる

26 :
>>17
つい、今確認したけど、普通に、Amazonで定価で買えるよ。
Amazonでは、常に人気書籍を定価以上の価格で出品している業者が張り付いている。
普段は売れないけど、たまたまAmazonの在庫が切れたときにアクセスして、、
「まずい、もうレアものになってしまったんだ」って勘違いして買う人が居るからだって。

27 :
>>26
そうでしたか。
それはすばらしいです。
ところでVBAじゃなくExcelの関数のほうも
こういうサンプルがた〜くさん載ってる実用的な本は
ないものでしょうか?

28 :
>>25
ありがと、やっぱそうなのか。ググっても"要素数を指定"って書いてるのが多くて悩んだ。
久しぶりにVBA触ると色々謎仕様に直面して驚く。

29 :
一つのボタンで、画像と曲を変えていくものを作りたいです。
画像の部分はできたけれども、曲がだめぽ。
Dim cnt As Integer
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Const FILE_NAME As String = "C:\menu.mp3"
Private Sub UserForm_Initialize()
cnt = 1
ImageChange
musicChange
End Sub
Private Sub CommandButton1_Click()
ImageChange
musicChange
End Sub
Private Sub ImageChange()
On Error Resume Next
With Worksheets(1)
If cnt > .OLEObjects.Count Then cnt = 1
Image1.Picture = .OLEObjects("Image" & cnt).Object.Picture
cnt = cnt + 1
End With
End Sub
Private Sub musicChange()
If cnt = 1 Then
Call mciSendString("play """ & FILE_NAME & """", "", 0, 0)
Else
Call mciSendString("close """ & FILE_NAME & """", "", 0, 0)
End If
End Sub
曲はここから入れ子にしたいのだけど、最初の曲が流れない・・・

30 :
cntが初期値1でImageChangeで+1されてからmusicChangeを呼び出してる
つまりcnt=1でmusicChangeを呼び出すことはないわけだが

31 :
Private Sub musicChange()
If cnt = 2 Then
Call mciSendString("play """ & "C:\アンパンマン.mp3" & """", "", 0, 0)
Else
Call mciSendString("close """ & "C:\アンパンマン.mp3" & """", "", 0, 0)
End If
If cnt = 3 Then
Call mciSendString("play """ & "C:\カレーパンマン.mp3" & """", "", 0, 0)
Else
Call mciSendString("close """ & "C:\カレーパンマン.mp3" & """", "", 0, 0)
End If
・・・以下 cnt=7 まで
End Sub
>>30 ありがとー。ちゃんと見直したらうっかりだった。
   で、このif文。うーん、確実にmp3をクリックで消すのでこの処理だけど
   もっとスマートにならんかのー。

32 :
ファイル名を配列に突っ込んでおけばいいじゃない。
んで、ループで回してcntに一致している奴だけplayで後は全部close。

33 :
初心者です。
実行時エラー1004が出ます。
どこを直せばいいのか教えてください。
windows7/excel2010
Sub SetRows()
With Worksheets("Sheet2")
.Activate
.Range(Cells(2, 2), Cells(5, 5)).EntireRow.Value = "hoge"
End With
End Sub

34 :
Cellsの出所が怪しいな。

35 :
>>33
標準モジュールに書いてれば糞コードだけど一応それで動くはず。
Sheet2以外のシートモジュールに書いてあればRangeとCellsの親(シート)が違うので動かない。
正しくは
Sub SetRows()
With Worksheets("Sheet2")
  .Range(.Cells(2, 2), .Cells(5, 5)).EntireRow.Value = "hoge"
End With
End Sub
とCellsにもシートの修飾をつける。

36 :
>>35
なるほど、なるほど
ありがとうございます!!
Sheet2以外のシートモジュールに書いてます。
インターネットのサイトを見て勉強し始めた段階なので
糞コードなのは申し訳ないです。
勉強になりました!

37 :
VBAの入力補完機能だっけ?(Ctrl+Spaceのヤツ)
自分で定義したConstなどなどが
入力補完されることに今更気がついた。
しかも標準モジュールにつけた名前なんかも
入力補完の対象なのね。
処理時間は落ちるかもしれないけど、
標準モジュール名.モジュール名〜などで
明確に定義付けすると意味が通ってメンテが楽になりそう。

38 :
VBAからデスクトップ上などになるtxtファイルの中身を操作(文字列の追加・書き換え・削除)することは可能ですか?

39 :
可能

40 :
どうするのかを聞いておるのだ、アホ

41 :
>>40
VBAでそういうコードを書けば良い
OK?

42 :
>>38 は可能かどうかを聞いてるだけだが? アホ?

43 :
ここはあえてOPENステートメントを推してみる。
How meny files? な世界も偶には良いよね。

44 :
Windows Script Host Object Modelへ参照設定して
Dim DesktopPath As String
Dim ShellObject As IWshRuntimeLibrary.WshShell
Set ShellObject = New IWshRuntimeLibrary.WshShell
DesktopPath = ShellObject.SpecialFolders("Desktop")
これでデスクトップのパスは得られるから、後は好きなようにやればよろし

45 :
FileSystemObject使ってファイルパスとってきてそれを開いてあなた色に染めてから閉じる

46 :
テキストファイルに色を付ける方法kwsk

47 :
そういうのスレ違いって>>2に書いてあるよ

48 :
そんなこと言わずに教えれ

49 :
>>48
これお勧めだよ。
http://ec2.images-amazon.com/images/I/413NNoUiCoL._SL500_AA300_.jpg

50 :
 ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ∧_∧
    ( ´・ω・`)     ∧_∧
    /     \   (    )何言ってんだこいつ
.__| |    .| |_ /      ヽ
||\  ̄ ̄ ̄ ̄   / .|   | |
||\..∧_∧    (⌒\|__./ ./
||.  (    )     ~\_____ノ|   ∧_∧
  /   ヽ 空気読めよ   \|   (    )
  |     ヽ           \/     ヽ. オマエ馬鹿だろ
  |    |ヽ、二⌒)        / .|   | |
  .|    ヽ \∧_∧    (⌒\|__./ /

51 :
VBAで日付のシリアルの変数はIntegerで保管しておいて良い?
あるいはLongにしないとだめ?
あらまDate型もあるのね。絶対にDateにしないとだめ?

52 :
>>51
用途による
IntegerでもByteでもお好きな型をどうぞ
2011/12/4はシリアル値だと40881だけど、必要な範囲はプログラムの作者にしかわからないから

53 :
>>52
Integerだと32000位までじゃなかったか?

54 :
NumberFormatとNumberFormatLocalの違いは
なんですか?

55 :
activecell.offset(1,0).select
activecell=10
activecell.offset(1,0).activate
activecell=10
これ結果は同じですよね?どちらがどういう理由で好ましいですか?

56 :
>>54
NumberFormatLocalプロパティ
使用中のWindowsの国別情報に従った言語の書式記号が表示される
NumberFormatプロパティ
Exel既定の言語(英語)に従った言語の書式記号が表示される
基本、NumberFormatLocalを使っておけばOK

57 :
>>56
なるほどよくわかりました。
Localは地球の地域という意味でのlocalだったんですね。
Thank you.

58 :
時間を変数にするときも型はdateでOK?
あと、date型に日付だけを代入して使ってるときって時間の情報もたとえば0:00:00みたいなのがダミーで入ってるの?
逆の場合も疑問。(時間を代入したときは日付も入ってる?もしそうならそのときの日時は?)

59 :
やりたいようにやれよ
いちいち他人に聞いてたら
出来るもんも出来んよ

60 :
>>58
> あと、date型に日付だけを代入して使ってるときって時間の情報もたとえば0:00:00みたいなのがダミーで入ってるの?
> 逆の場合も疑問。(時間を代入したときは日付も入ってる?もしそうならそのときの日時は?)
なぜ試さん?

61 :
みんなのVBA力と回答力を試しているんですが

62 :
>>61
VBA力とか言ってる時点でみんなより自分が格下なのに気付けよ

63 :
わからないなら無理にレスしてくれなくていいよ?

64 :
>>63
こら、それはオレのセリフだ
ニセモノめが

65 :
ここまでおれのじえん

66 :
ツマンネ

67 :
セルに色が塗ってて、
その色をRGB(x,y,z)で表すときのx,y,zの値を取得するにはどうすればいい?

68 :
>>67
C = Range("A1").Interior.Color
R = C And &HFF
G = (C \ &H100) And &HFF
B = (C \ &H10000) And &HFF

69 :
スレ違いでしたらごめんなさい
Excelを用いてオークションのシミュレーションをしたいのですが、そのためには何について学ぶべきですか?
参考となる書籍やサイトをご存知でしたら教えていただきたいです
現在、どうやらExcelでオークションのシミュレーションができそうだ、ということを知ったレベルです
よろしくお願いします。

70 :
>>69
Sub オークションシミューション()
Dim a As Integer
a = Int(Rnd * 100 + 1)
If a <= 20 Then
ActiveCell = "あなたは入札にしました"
Else
ActiveCell = "あなたは入札に失敗しました"
End If
End Sub

71 :
>>69
> Excelでオークションのシミュレーションができそうだ、ということを知った
どこで知ったのか知らんけど、そこで聞けよ。

72 :
>>71
それはExcelでシミュレーションをできるということを知って、自分のやろうとしてることも恐らくできるだろうと判断しました
どこかの掲示板で聞いた、というわけではないんです

73 :
>>72
> Excelでシミュレーションをできるということを知って
だから、どこで知ったんだよ。
て言うか、他人と会話したことないのか?

74 :
>>69
まずオクのシミュレーションはどんな作りにしたいのかをフローにして、
その後VBAでどう言ったコードにすればいいかを
考えればいいんじゃないかな

75 :
>>74
何から手を付ければいいかわからなかったので、とても参考になりました
ありがとうございます

76 :
ネットワーク上の共有フォルダにアクセスしたいんですが
VBAからネットワーク認証を行うにはどうすればよいのですか?

77 :
>>68
あなた頭いいですな
脳ミソ詰まってる
わたしにも分けてくれ

78 :
別シートを操作するとき、そのシートをactivateしないとできないんだっけ?
でもできることもあるみたいだし。
でもそれを忘れてるか気にしないでいるとエラーが出ることもある。
どなたかこのしくみはどうなってるか教えてくれませんか?
非常に困っております。

79 :
Excelで実際に操作するのと同じ様に使えばほぼ問題は無い。
でも、同じ操作で無くてもある程度は融通が利くよ。
って感じじゃね?
うまく動かなくて困ったら実際の操作を真似させる、で十分かと。
深く悩んだところで、MSの中の人すら完全に理解しているかどうか怪しいし。

80 :
>>78
特定のシートオブジェクトを明示的に取得して、activate せずに、そのシートに対して操作することは可能
activate しないと使えない機能もあるが、どちらかというとレアじゃないかと思う
問題はマクロの記録とかで記録したコードについては activate前提のコードの書き方になっているということで、
記録したコードをそのまま使い回したいなら、アクティベートしたほうが無難だとは思う

81 :
個人用マクロブックを作ったら
Excelを[X]で閉じようとしたときに
2回ボタンを押さないといけなくなりやがった。
これを防ぐ方法ある?

82 :
最近vbaの勉強始めた
大村あつしさんの参考書使ってる
4月までには使えるようになりたい
プロ野球の選手成績を管理したいんだ
野球ゲームの成績まとめでも使いたいし

83 :
>>81
なんてメッセージ出てんの?

84 :
>>83
メッセージはなにも出ないんだ。
みんなも個人用マクロブックを作ってたらそうなってるんでしょ?

85 :
>>82
http://yuzuru.2ch.net/test/read.cgi/gamespo/1323059897/14-
あなたはこの人ですか?

86 :
>>78
activateしないとできないのは、copyメソッドとかpastespecialメソッドとかでしょ
他にもあったっけ
なぜできないのか、この辺の理屈がどうも分からないんだよな〜

87 :
Pasteメソッドが、シートに対して行うというのも理解できない。
なぜそういう仕様になってるかおわかりのかたいらっしゃいますか?

88 :
お知恵を拝借させてください。
下のように右クリックメニューから選択範囲のセルを塗りつぶす、みたいなことがしたいのですが、
「引数は省略できません。」のエラーになります。
どうすれば引数(例:34)を渡せますでしょうか?
Sub addMenu()
 Dim CB
 Set CB = Application.CommandBars("Cell").Controls.Add()
 With CB
  .Caption = "塗りつぶし"
  .OnAction = "setColor(34)"
 End With
End Sub
Sub setColor(col As Long)
 With Selection.Interior
  .ColorIndex = col
 End With
End Sub

89 :
>>88
パージョンいくつ?
.OnAction = "'setColor(34)'"
又は
.OnAction = "'setColor 34'"
じゃないかな?(シングルクウォートで括る。)
ちなみに複数の引数を渡したい時は、自分の知ってる限りでは
.OnAction = "'setColor 34,4'"
とかでうまくいくハズ

90 :
>>87
仕様の理由はわからんけど、動作見る限りエクセルVBAって
人が操作する動作をトレースしてるだけだから
手動で出来ないことはVBAでも出来ないってコトでいいんじゃね?
だからコピーもペーストもシートをアクティブにしないと出来ないと。

91 :
>>90
VBの機能も使えるから出来ることは同じじゃない

92 :
>>86,90
Sub test()
    Sheet2.Activate
    With Worksheets("Sheet1")
        .Range("C1:C5").Copy
        .Range("D1:D5").PasteSpecial _
            Operation:=xlPasteSpecialOperationAdd
        .Paste (.Range("E1:E5"))
    End With
End Sub
別にシートがアクティブじゃなくても使えますが?
>>87
(この場合の)Pasteメソッドがシートのメソッドなんだから対象がシートなのはまあ当然
RangeにPasteメソッドが無い理由なら解らん。PasteSpecialはあるのにな
どうせ操作対象をちゃんと指定してないから、アクティブシートが対象になってるだけだろ
アクティブじゃないとできない操作の実例教えてくれ

93 :
Activateが必要だと思ってる奴はド素人

94 :
どうせExcelのバージョンで挙動が違うとかいうオチだろ。
実際に使われる環境で正しく動けば、それで良いじゃん。

95 :
>>89
できました!ありがとうございました。
バージョンは2003と2007です。

96 :
さまざまな処理を各プロシージャが担当させるようにし
本体プロシージャはシンプルそのもの、
そしてプロシージャから他のプロシージャを呼び出しまくるような
かっこいいプログラミングがしたいです。
そんなスキル (=プロシージャを呼び出しまくるスキル) を学ぶに特化した学習用の本があれば紹介していただけますか?

97 :
最近学習を始めたばかりの初心者です
わからないことがあったので質問させてください
VBAを使って
1、2500、5000、7500
の4つの数字をランダムで選ぶ
そしてこの動作を繰り返す
というプログラムはどうやって書けば良いのでしょうか
よろしくお願いします

98 :
丸投げいくない

99 :
>>98
すいません
できるか出来ないかだけでも教えていただけますか?
この4つをMT乱数を用いて選び出したいんです
そしてこの試行を繰り返す、という動作です

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
4: 推薦図書/必読書のためのスレッド 65 (522)
5: スレ立てるまでもない質問はここで 115匹目 (601)
7: Androidプログラミング質問スレ Part16 (228)
8: NullPointerExceptionを「ぬるぽ」と呼ぶスレ6 (242)