1read 100read
2012年07月プログラム22: Excel VBA 質問スレ Part26 (752) TOP カテ一覧 スレ一覧 2ch元 削除依頼
MVVMについて語ろう (398)
小学生プログラマだけど質問ある (236)
いまだにVC6から離れられない奴の数→ (219)
正規表現 Part10 (365)
C++でXML(主にxerces)やろう! (674)
Rubyについて(アンチ専用) Part004 (747)

Excel VBA 質問スレ Part26


1 :2012/08/19 〜 最終レス :2012/11/08

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

2 :

関連スレ:
VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/

3 :
MsgBox ">>1乙", vbAlert
しかしWin8でもVB6サポートされるとか
やっぱ当分VB系は安泰だなぁ

4 :
閉じたままのBook内のデータを参照するにはどうしたらいいですか?
そして閉じたぱぱのBook内のデータをオートフィルタすることもできたりしますか?

5 :
パパやママのことは、直接本人(両親)に相談してください
というのはさて置き、閉じたままと言っても、当然本当に閉じたままでは
何も出来るわけが無いので、「閉じたまま=GUI上で開かず」と解釈すると
ExcelのCOMインスタンスを作ってやってそれで開けばいいだけ
後の操作は普通に開いてるブックやシートと全く同じ
GUI上には表示せずに、裏で開いた状態でなんでも出来る

6 :
>>4
どうしてググろうと思わないわけ?

7 :
http://prt.iza.ne.jp/images/news/20120819/502425_c450.jpg
雷でよく見る実にわかりにくい図のことで質問です。
濃いピンクが安全だということらしいけど
それより内側は危険であり、さらにそれより外側も危険という認識で合ってますか?

8 :
どこの誤爆だw

9 :
ExcelVBAで
Outlookのテンプレートの機能をプログラミングをしたいのですが
その方法を教えてくださぃ。
Outlookのテンプレート機能を使わないのは
メールの本文中にその当日の「日付」を使ったり
Excelのセルに用意したデータをメールの本文に使いたいからです。

10 :
outlookのvbaでやれ

11 :
みんなおはよう
>>7
合ってると思うよ

12 :
モジュル先頭で宣言する変数はそのモジュル全体で使えるとのことですが
マクロ実行後も値はそのままですか?
次回にマクロ実行したときは値はそのぱぱ残ってる値に加算されますか?

13 :
>>12
その変数がクリアされなければ残ってる。
いつクリアされるのかは、明らかではない。
クリアされて困るなら、シートに保存すべし。
詳しくは、こことか参照。
http://www.moug.net/tech/exvba/0150116.html

14 :
>>5
COMインスタンスとはなんでしょぅか?
>>13
びっくりですね。
これからはモジュル先頭で変数は宣言しないことにしました。

15 :
>>14
> これからはモジュル先頭で変数は宣言しないことにしました。
関数の実行開始から終了までの同一性は保証されてるから、その範囲で使うなら問題ない。
「関数の実行開始から終了まで」というのは、
dim g as long
sub foo()
g = 1
 bar
debug.print g
end sub
sub bar()
g = g + 1
end sub
のとき、foo()の開始から終了までという意味。
なお、クラスを使ってgをプロパティかprivate変数にすれば、知らない間にクリアされるということはなくなる。

16 :
>>15では無いが
よく解らなかったらとりあえずシートに残して使う時だけ拾うようにしとけば良いんでねーの
解ったら自分で直せる訳だし
COMはググれとしか。多分意識しないでも使ってるんだろうけど。

17 :
ユーザーフォーム表示してると表示されてる間はまずクリアされないよ

18 :
ユーザーフォームを表示している時に
別のブックを開いてアクティブにするにはどうしたらいい?

19 :
元のブック.ユーザフォーム.Activate

20 :
ありゃ?
元のブックのユーザフォーム.を開くには
元のブック.ユーザフォーム.Showでできないのはどうして?
>>18
単に「別ブック.Activate」でいいじゃん。

21 :
>>20
マクロから開くのではなくて、
普通にフォルダからダブルクリックで開いたときに
アクティブになるようにしたいのです。

22 :
>>21
したいのならしろよ。

23 :
他ブックのFormをActivateするにはどうしたらいいですか?

24 :
荒らすなよ

25 :
>>21
マクロ使わないなら、スレ違いだからどっか行って。

26 :
>>25
スレ違いですか?
元々開いてるユーザーフォームのあるブックの
マクロで設定できないかと思ったんですが

27 :
thisworkbook:
private sub workbook_open()
userform1.show
end sub

28 :
For sh = 5 To 10
Worksheets("" & sh & "").Activate
ActiveSheet.ChartObjects.Add(0, 500, 960, 300). _
Chart.SetSourceData Sheets("" & sh & "").Range("C" & sh & ":C" & num + 5 & "")
ActiveSheet.ChartObjects(1).Chart.ChartType = xlLineMarkers
Cells(1, num).Select
Next sh
埋め込みグラフが選択されているのをはずしたいだけなのですが
Cells(1, num).Selectのところで「アプリケーション定義またはオブジェクト定義のエラーです。」
と出ます。解決策をご教授ください。

29 :
>>28
ActiveSheet.Cells(1, num).Select
にしてみたら?
あと、Withとか使うと楽かもよ

30 :
>>28
numが定義されてないんじゃね

31 :
>>30

32 :
>>31
やめて!桃白白にむやみにリンクを張らないで!
定義のエラーっていってたから定義されてないんじゃねって桃白白考えたの
Cellsはオブジェクトが指定されなかったらアクティブワークブックのアクティブシート
を返しちゃうだろ WorksheetsほげほげActivateでアクティブシートが選択されてんだから
ActiveSheetってつけなくてもいんじゃね

33 :
フォフォフォ…
  ∧ ∧
  |≡V≡|
  |O(\)O|
(V)(゚Д゚)(V)
 ヽ三i三ソ
  (/ \)
  ∪"∪

34 :
フォッフォッフォッ
 (V)∧_∧(V)
  ヽ(・ω・)ノ
   / /
  ノ ̄ゝ
フォッフォッフォッフォッフォッ
   (V)∧_∧(V)
    ヽ(  )ノ
     / /
 .....ノ ̄ゝ

35 :
マクロを頻繁に使ってたらPCが非常に重くなり、Excelの超基本操作のセル移動でさえ2-3秒かかることがあります(通常は一瞬)。
仕事で使ってるのでAM9からPM6までずっとExcelは立ち上げたままです。
マクロが原因なのは間違いないと思います。
軽くするにはどうしたらいいでしょうか?

36 :
>>35
マクロが原因だということまで特定できてるなら
そのマクロのバグを修正しろよ・・・

37 :
>>36
そんなこといわずに
あなたが上級者なら
よく初心者が犯しがちな
メモリーを消費したままになる良くないコードを予想し
それに対しての対策を指示してあげたらどうです?

38 :
>>37
エスパーしたらいいじゃない! 教えてくれたらいいじゃない! ってか
じゃあ桃白白が教えてあげちゃう
グローバル変数使うのやめな これで100%解決する
桃白白に感謝しちゃったらいいじゃない

39 :
残念ながら白桃には感謝できん
グローバル変数なんて野蛮なものは使ってないからだ

40 :
>>39
いいやお前はグローバル変数を使っている
使っていないと思い込んでいるだけだ
桃白白は上級者だがお前は初心者だ
初心者は上級者の言うことを素直に聞くべきだ
お前はグローバル変数を使っている お前はグローバル変数を使っている 目を閉じて反芻しろ

41 :
>>40
のび太のくせに生意気だ

42 :
VBA触り始めて数日の初歩的な質問ですみません。
環境はWindows7、Excel2007です。
ユーザーフォーム上のテキストボックスに
セルをリンクさせたいのですが、テキストボックスのプロパティの
Text欄、Value欄に「=Sheet1!A1」と入れても「」内の文字列が
そのまま表示されてしまいます。
Excelのシート上のテキストボックスで同じ操作をすると
そちらはきちんとセルがリンクされるのですが…。

43 :
>>42
ユーザーフォームのテキストボックスなら
「=Sheet1!A1」を入れるのはControlSource

44 :
>>35
エラーメッセージとか出ないの?
Excel2007だとこんなバグもあるみたいだけど
http://support.microsoft.com/kb/971594/ja

45 :
>>43
おおおおお!出来た!
これでとりあえず形だけは完成しました。
ありがとうございます

46 :
>>42です
実際に動かしてみたら問題が発生してしまいました。
下記の状況です。
ユーザーフォーム上でコマンドボタンnAとコマンドボタンnBを重ねて表示
コマンドボタン1Aを押すとSheet1!B1に1が入力されコマンドボタン1Aが背面に移動
コマンドボタン1Bを押すとSheet1!B1に0が入力されコマンドボタン1Bが背面に移動
コマンドボタン2Aを押すとSheet1!B2に1が入力されコマンドボタン2Aが背面に移動
コマンドボタン2Bを押すとSheet1!B2に0が入力されコマンドボタン2Bが背面に移動
以下コマンドボタン3〜と続く。
Sheet1のA列にはあらかじめ決まった数字が入力されていて、Sheet1のC列はA列とB列の積です。
Sheet2のA1はSheet1のC列の合計、SUM(Sheet1!C:C)です。
たとえばSheet1!A1に30、Sheet1!A2に40が入力されていたとして、
ボタン1Aを押すとSheet1!C1が30*1で30となり、まずSheet2!A1が30になり、
次いでボタン2Aを押すとSheet1!C2が40*1で40、Sheet2!A1が30+40で70になります。
このSheet2!A1を先ほどのテキストボックスのControlSouceに入力したのですが
コマンドボタン1Aを押すとSheet2!A1にSheet1!A1 * Sheet1!B1の数値、上記の例だと30*1の30という数値が
入力されてしまい、SUM(Sheet1!C:C)という数式は消え、他のコマンドボタンを押しても反応がなくなってしまいます。
どうすればよいのでしょうか。。

47 :
>>46
各コマンドボタンのクリックイベントに
Sheet2.Cells(1,1) = "= SUM(Sheet1!C:C)"
って入れといたらどうですか?
あと、On/Offの2値を扱いたいなら
コマンドボタンよりトグルボタンのほうが良くないですか?

48 :
>>46,47
まずControlSource使うのやめて、
各ボタンのクリックイベントに、TextBox1.Text = Sheet2.Range("A1").Valueとか書くのが正解だろ
(つかそう書いたサブルーチン呼べ)
というかまずボタンを重ねて配置するとか馬鹿なことをやめろよ

49 :
埋め込みグラフの目盛り線を選択したいのですが、エラーになってしまいます。
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
どこを直せばいいですか。

50 :
シートに挿入したチェックボックスが消せません。
どこを直せばいいのですか。
Activesheet.Shapes.Delete

51 :
>>49
なんというエラーが出る?桃白白にもわかりそうなエラー?
わかりそうなやつだったら答えちゃうけど

52 :
>>50
For Eachでぐーるぐる
Dim s As Shape
For Each s In ActiveSheet.Shapes
  If (s.Type = MsoShapeType.msoFormControl) Then
    If (s.FormControlType = XlFormControl.xlCheckBox) Then
      s.Delete
    End If
  End If
Next

53 :
>>47
>>48
役割はトグル以外の何物でもないのですが、
クリックすると白黒画像からカラーに変わるギミックを
どうしてもやりたくて、方法がわからずこのような原始的な方法を取りました。
各ボタンに記述してみます。ありがとうございました

54 :
>>49
選択しようとするからじゃないの?
ActiveSheet.ChartObjects(1).Activate

55 :
>>54
ActiveSheet.ChartObjects(1).Activate
ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select
できましたwありがとうございます

56 :
>>55
そんなの桃白白認めない

57 :
ExcelVBAの型変換について疑問がありますので、詳しい方、ご教示ください。
ExcelVBAでは、文字型の数値が、代入先の型に自動的に変換されるものと漠然と思っていました。
以下のようにサンプルを作ってテストしてみましたが一貫しない結果がでました。
Test1は、文字列が数値化されて数値の合計が表示されました。
しかし、Test2では、文字列の連結として表示しました。
さらに、宣言文の(**)の部分を、Dim Int3, Int4, n As Long からDim Int3, Int4 As Long としてnを除くと、正常に数値として加算されました。
このように変わるのはどうしてでしょうか?
原因がわからないと安心してマクロを組めないのでよろしくご教示ください。
(WindowsXP Excel2007です)
Sub 型変換テスト()
Dim Int1, Int2 As Long '(*)
Dim Int3, Int4, n As Long '(**)
Dim Sum1, Sum2 As Long

' ******* Test 1 ************
Int1 = "1827"
Int2 = "1931"
Sum1 = Int1 + Int2
MsgBox ("Test 1 = " & Sum1)
' ******* Test 2 ************
Int3 = "1827"
Int4 = "1931"
Sum2 = Int3 + Int4
MsgBox ("Test 2 = " & Sum2) '文字列の連結
End Sub

58 :
>>57
ちゃんと宣言されてないよ

59 :

初心者がよくハマるやつだな
Dim Int1, Int2 As Long
 Int1は型指定無し、Int2はLong型
Dim Int3, Int4, n As Long
 Int3, Int4は型指定無し、nはLong型
Dim Int3 As Long, Int4 As Long, n As Long
 Int3, Int4, n全部Long型
型はひとつひとつ指定しないとダメ
Dim Int3, Int4, n As Long
だと最後のnしか型指定してないことになる
型指定無し(Valiant型)だと、代入した値依存の内部型になるから
Intのつもりで実はstr3 + str4をやっていたというわけだ

60 :
初心者じゃ無いつもりだけど未だに分からないのがdecimal。
なんで宣言出来ないんだ??

61 :
>>60
仕様に対して「なんで」って言い出したらキリがない

62 :
現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません
ってヘルプに書いてあるから、そういう仕様だとしか

63 :
ある程度割り切りも必要だけど、
何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。

64 :
調べれば仕様だって事はすぐわかるんだが、追及なんて全くしてないだろ
なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが

65 :
一応Currency型があるから。
誰も覚えてなさそうだけどw

66 :
57です
59様、ありがとうございます。
てっきり複数列挙してもまとめて型宣言できるものと思っていました。

67 :
セルにAlt+Enterで改行したデータを
ユーザーフォームのTextboxに入れようとしても
改行してくれないんですね。
何かいい方法はないですか?

68 :
>>67
たぶん MultiLineがFalseになってるだけだと


69 :
>>68
ありがとう!

70 :
>>63
追求する意味があるものと無いものを見極める能力も無いとダメだよ
何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて
無駄な愚考をしないのは違うからね

71 :
おまいらが作ったクラスモジュール教えてくれ
使える、別のアプリ専用、面白い、誰得と何でもいいわ

72 :
>>71
具体性のない質問というかネタクレクレはスレ違い
>>2でも行くかググって漁れ

73 :
ソート用クラスなら。
並び替えられるデータは数字の入った配列で、
比較メソッドはイベントとして使う側で実装する形。
数字=インデックスとして見れば、どんな内容のソートにでも使える。

74 :
入力データを取り込むのに
Dim ttl As String
If TypeName(buf) = "String" Then
ttl = InputBox("タイトルを入力", title:="タイトル入力", Default:=buf) ←bufは事前にクリップボードからセット
Else
ttl1 = ""
End If
と言うのを作ったのですが、これだと1度に1つの文字列しか取り込めません
1つのダイアログを表示して入力箇所を2つ表示し
同時に2つの文字列を取り込む場合どうすればよいのでしょうか?

75 :
ユーザーフォーム使えば良いだけだと思うよ

76 :
使う方が嫌じゃなければカンマで区切るとか

77 :
あとはforで二回まわすとか?
ユーザーフォームが一番スマートだと思うけどね

78 :
ユーザーフォームって本を買ってきてVBを独学したときに作った記憶があるな
クリップボードから拾わせた文字列を入力の初期値にして
文字列を入力したらVBに取り込んで
シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど
やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある
同じ内容なんだけど、入力した時期によってキーワードが違っているときとか

79 :
解読しづらい文章だな

80 :
各セルの文中の最初に「★」がついてるものだけを探して「★」だけを消すのはどうすればよいでしょうか
最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています
よろしくお願いします

81 :
>>80
Range.Findで探して、Mid$関数で消せば良いんじゃないか?
その条件ならワイルドカードが使えるし。

82 :
    Selection.Replace What:="★*", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね

83 :
>>80
↑ので充分だと思うけど
もし範囲が決まっているなら
Sub test()
Dim r As Range
For Each r In Range("A1:B5")
If r Like "★*" Then r = Replace(r, "★", "", 1, 1)
Next r
End Sub
でもどうだろうか

84 :
if instr(hoge,"★") = 1 then
right(hoge,len(hoge)-1)

85 :
エクセルでwavファイルを取り込んでmp3で保存することは可能でしょうか?

86 :
常識だろw

87 :
>>85
エクセルでやる意味について

88 :
>>85
世の中広いな

89 :
>>87
エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。

90 :
>>85
可能だけどスレ違い

91 :
マクロ1でマクロ2を走らせる時、どちらも同じ変数名を使っているのですが問題ないですか?
それぞれのマクロの中で値を指定していれば大丈夫ですよね?
一応動くのですがちょっと不安なので詳しく教えてください

92 :
変数にはスコープって概念があってな
大丈夫かどうかはソースみないと何とも言えん

93 :
Public変数を知らなそうなので大丈夫でしゅ

94 :
ユーザー定義関数の引数にrangeオブジェクトを指定した場合、
その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか?
範囲は固定ではなく任意です。
環境なくて試せません。お願いします

95 :
軽くって?
配列に移し替える時にループ使うから意味ないと思うけど

96 :
>>95
失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。
たしかにループしたら効果半減ですね…


97 :
ソートの質問です
Sheet1が
A B C
1あ い う
2か き く
3さ し す
となっていて
Sheet2で関連度の表を作っていて
 A B C
1 さ し す
2さ 2 0 1
3し0 2 1
4す1 1 2
としています
これを,Sheet1でセルを選択した時に,Sheet2の関連度を呼び出してソートするのはどのように書けばいいでしょうか
例えば,B3[し]を選択したら,Sheet2で[し]をみると関連のある順に[し][す][さ]なので
Sheet1全体を
A B C
1い う あ
2き く か
3し す さ
と並べ替えたいのです
また,このようなソートはどのようにググればやり方が出てきますか?

98 :
自力で関数を書く

99 :
>>97
Worksheet_SelectionChangeでググってみたらどう?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
懐かしのMS-DOSプログラミング (380)
電卓作る (223)
VisualBasic6.0 対 VisualBasic .NET 2003 (460)
Rubyについて(アンチ専用) Part004 (747)
Google Maps API 質問箱 (323)
リファクタリングがしやすいのは、静的型付け言語 (401)
--log9.info------------------
オウムの音楽を集めるスレ (560)
パコ・デルシア (734)
***ブラジリアンテイストなヨーロッパ音楽*** (285)
【シャンシャン】上々颱風2【タイフーン】 (274)
ガムラン音楽スレッド (623)
【西】スパニッシュポップ【西】 (911)
タルカンほかトルコ・ポップスを語る! (617)
ポチョンボ電子楽団を語ろう! (424)
★★★ アラビア語圏の音楽って ★★★ (768)
サンディー&ザ・サンセッツ (628)
ワールド音楽を誤解している人 (243)
【渚の】リチャード・クレイダーマン【モナー】 (241)
造語 ADIEMUSを語ろう! (664)
【ブラジル】Musica Popular Brasileira【MPB】 (228)
ブーガルー・デスカルガ・スレッド (333)
ブラジルのショーロ (323)
--log55.com------------------
TCA ●携帯電話・PHS契約数Part.1271
防犯パトロール問題 特定人物を尾行監視 in 携帯PHS
【沖縄】携帯安売情報☆1
修理・費用・保証 を語るスレ
平成の嫌われ者 孫正義
ウィルコムカウンター・ウィルコムプラザ総合 PART1
年寄りのケータイマナーは最悪!
【西日本】全キャリヤ 電器店一括安売情報★00001