トップページtech
1001コメント373KB

Excel VBA質問スレ Part8

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/08/25(月) 23:16:33
ExcelのVBAに関する質問スレです

前スレ http://pc11.2ch.net/test/read.cgi/tech/1212587819/

★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)
0114デフォルトの名無しさん2008/09/06(土) 16:25:59
関数なんだからなんらか値を返す
仮にintegerの型でパラメータを受取ってintegerの何かを返すとして
Sub 名前()
Dim a as integer
Dim param as integer
param=100 ←何かの数字(integerの範囲内)
a = abc(param)

End Sub

Function abc(param as integer) as inetger


abc = **** ←何か処理した結果のintegerの数字
End Function
0115デフォルトの名無しさん2008/09/06(土) 17:04:48
<<114
113 です。早速のお教え有難う御座います。
なんらか値を返す様に変更します。
0116デフォルトの名無しさん2008/09/06(土) 17:10:04
>>113のCのコードを何も考えずにVBAにするとこうだぞ。
Sub main()
    Call abc()
End Sub

Sub abc()
    ---
End Sub
戻り値の型がvoidの関数はSub、それ以外はFunction。
戻り値を受け取らない場合、Sub/FunctionにかかわらずCallを付ける(Call使わない記法もあるけど)。
0117デフォルトの名無しさん2008/09/06(土) 17:30:42
>>116
113 です。いろいろお教え戴き有難う御座います。
この方法が簡単なので採用させて戴きます。

0118デフォルトの名無しさん2008/09/06(土) 18:07:40
>>114
>>116
113 です。プログラム作成途中ですが、両方とも必要になりましたので、
共に採用させて戴きます。いろいろと、有難う御座いました。
0119デフォルトの名無しさん2008/09/06(土) 21:14:05
http://pc11.2ch.net/test/read.cgi/tech/1204552981/878
0120デフォルトの名無しさん2008/09/06(土) 23:37:07
関数は、なんらかの値をかえすべきであるという考えた方が
身に染み付いてるから、SubとVoid関数は非常にきもちわるい。
0121デフォルトの名無しさん2008/09/06(土) 23:38:23
要するに時代遅れですね
0122デフォルトの名無しさん2008/09/07(日) 00:36:46
かえり値もたない関数は、デバッグがむずかしくなるから、医療系の俺の会社じゃ
よほどのことがないかぎり作らない。むしろ121がしろうと
0123デフォルトの名無しさん2008/09/07(日) 00:52:19
>>122
VBAスレで恥ずかしい事いうなよおっさん。
0124デフォルトの名無しさん2008/09/07(日) 01:49:03
LispとかMLでの話なら>>120>>122も分かるが、
VBAで純粋関数型プログラミングは無茶があるだろ、常識的に考えて。
0125892008/09/07(日) 03:31:47
むっちゃ早く打つ案に似た解決策で自己解決しました。
必殺コピペです。
グローバルエリアに変数定義しようとしたらDimと打った時点でエラーメッセージが頻発
変数書こうとしても打っている途中でメッセージ頻発して書けない。
どこかにエラーチェックのタイミングプロパティがあると思うがコピペで解決したから諦めようかと思います
0126デフォルトの名無しさん2008/09/07(日) 07:55:30
そういや、functionしか存在しない言語もあるな。
0127デフォルトの名無しさん2008/09/07(日) 10:23:41
よくいるんだよね。VBにしかVariant型がないと思ってる自称上級者
0128デフォルトの名無しさん2008/09/07(日) 14:27:52
ファイルを開かずにアクティブシートを変更するにはどうしたら良いでしょうか。

AccessのTransferSpreadsheetでエクセルの任意シートへデータを出力していますが、
エクセルファイルを開いた時に、値を出力したシートがアクティブになっているようにしたいのです。
01291282008/09/07(日) 14:30:04
ついでに読み取り専用属性の操作もできればサイコーです
0130デフォルトの名無しさん2008/09/07(日) 14:45:07
please tell ass in Japanese...

Sheets("hoge").Activate
Sheets("hoge").SaveAs "c:\hoge.xlsx", xlWorkbookNormal, , , True
01311282008/09/07(日) 15:15:51
えー、ファイルを開かない状態でアクティブシートを変更したいのです。
そのやり方だとインデックスエラーになっちゃうんですけど。
0132デフォルトの名無しさん2008/09/07(日) 15:26:27
Excelオブジェクト生成
ファイルオープン(非表示)
シートをアクティブにする
保存


0133デフォルトの名無しさん2008/09/07(日) 15:30:41
ここっていちいち一から百まで説明しないといけないから疲れるな
結局ファイルを開かなきゃいけないってことですね。どうもありがとうございました。
0134デフォルトの名無しさん2008/09/07(日) 15:39:47
偉そうに言ってますな w
0135デフォルトの名無しさん2008/09/07(日) 15:45:40
そりゃそうだ。エスパーなんてここにはいない。
0136デフォルトの名無しさん2008/09/07(日) 15:46:46
ここの奴らほとんど、ろくな知識も無いのに
知ったか振っててうざいんだもん
これぐらい言わせなよ
0137デフォルトの名無しさん2008/09/07(日) 15:51:18
うわぁ・・・低脳すぎて煽るきにもならない
01381282008/09/07(日) 15:52:01
あと別におまえらがエスパーである必要はねーけど
言われた事から、相手がなぜそうしたいのか、ではどういう方法が適切かくらい想像しろよ、と思うね
おまえら自分の知ってることが唯一の回答であるようにこじつけてるだけだろ。
そういうのをバカの一つ覚えって言うんだよ。
でも回答ありがとう。じゃね。
0139デフォルトの名無しさん2008/09/07(日) 15:52:32
っていうかxlsファイルを開くのとExcelのGUIを開くのを同じことだと思っている低脳っているんだね
0140>1372008/09/07(日) 15:53:30
じゃあ書くなよウスノロw
0141デフォルトの名無しさん2008/09/07(日) 15:53:47
うわぁ・・・ひどい池沼ですね・・・
0142デフォルトの名無しさん2008/09/07(日) 15:55:07
日本語で質問できるようになったら書き込みしような。
0143デフォルトの名無しさん2008/09/07(日) 15:56:22
高卒とかFランは書き込みできないようなフィルタかけてくれよ
0144デフォルトの名無しさん2008/09/07(日) 15:59:21
盛り上がってますね
0145デフォルトの名無しさん2008/09/07(日) 16:01:56
>>133
最低限1から5くらいまで説明しようぜ。
俺らお前のお母さんじゃないんだからよ。
0146デフォルトの名無しさん2008/09/07(日) 16:02:48
というより、
出来ないことは出来ないと説明した上で代替案を示すなら
ここまで荒れないと思うのだが。
条件に反することを回答するからこうなる
0147デフォルトの名無しさん2008/09/07(日) 16:03:39
>>132
でできると思うぜ。
0148デフォルトの名無しさん2008/09/07(日) 16:10:34
>>145
えっ?
>128を1から5くらいの説明で理解できるのか?
最近のお母さんてスペック高いんだな!
0149デフォルトの名無しさん2008/09/07(日) 16:11:33
OBJ.FileOpenは知ってたけどコードがごちゃごちゃするから嫌いなのよ。
他にもっとシンプルなやり方が無いのかな、って思っただけ。
0150デフォルトの名無しさん2008/09/07(日) 16:12:30
>>147
非表示だけど、ファイル開いてるからNGだろ。
想像力のない俺からすれば、元の質問自体がNGだけどな。
0151デフォルトの名無しさん2008/09/07(日) 16:13:04
変な知ったかいいわけ始めたぞ
0152デフォルトの名無しさん2008/09/07(日) 16:14:32

ファイル開かずにファイルを変更するなんて方法があったら俺が知りたいな
0153デフォルトの名無しさん2008/09/07(日) 16:16:31
128ってそんなに難しいか
まさかとは思うがプログラム板なのにAccessのVBAを知らん奴がいるのか
0154デフォルトの名無しさん2008/09/07(日) 16:20:31
簡単だぞ。質問がヘタなだけ。で質問の答えに対して実装できるスキルもないだけ。
0155デフォルトの名無しさん2008/09/07(日) 16:23:38
要するに低脳というわけですね。分かります。
0156デフォルトの名無しさん2008/09/07(日) 16:24:49
盛り上がってますなあ
01571282008/09/07(日) 16:38:58
結局お前らAccessVBAが理解できなかっただけ佳代w
低能エクセル厨乙w
0158デフォルトの名無しさん2008/09/07(日) 16:49:47
スレタイ100回音読してみろ。
それから自分の質問と回答を100回音読しろ。
0159デフォルトの名無しさん2008/09/07(日) 16:56:43
下手な釣りだなあ。次の質問どうぞ。
0160デフォルトの名無しさん2008/09/07(日) 18:49:05
>>128
が見えない
0161デフォルトの名無しさん2008/09/07(日) 20:20:00
excel vba 極めたいのですけど
お勧めの参考書はありますか?元制御系プログラマで
プログラミングの基本は充分できています。
技術評論社のポケットリファレンスはどうですか?
0162デフォルトの名無しさん2008/09/07(日) 20:25:06
便乗質問・・・。

win32APIを勉強したいのですが、お勧めの本ってありますか?
使用目的はExcel VBAで呼び出す事です。
0163デフォルトの名無しさん2008/09/07(日) 20:29:47
Excel VBAによるWin32 APIプログラミング入門 (単行本)

ぐぐることも出来ないの?
0164デフォルトの名無しさん2008/09/07(日) 23:32:31
質問者も回答者もバカが多いな
0165デフォルトの名無しさん2008/09/08(月) 00:05:08
お前ほどじゃないがな
0166デフォルトの名無しさん2008/09/08(月) 03:03:14
だな
0167デフォルトの名無しさん2008/09/08(月) 03:08:05
157 名前:128[] 投稿日:2008/09/07(日) 16:38:58
結局お前らAccessVBAが理解できなかっただけ佳代w
低能エクセル厨乙w

こいつリアルでもこんな感じなんだろうな
0168デフォルトの名無しさん2008/09/08(月) 07:45:44
>>162
マジレスするとWin32APIの為に本を買うのはもったいない。
MSDNとネット上のAPIサンプル集とかで十分。
0169デフォルトの名無しさん2008/09/08(月) 19:00:04
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1112704276
上のようなことの逆は可能ですか?
 
 例えば、セルAに映画のタイトルが縦に並んでて、
セルBにはその映画の詳細が見れるHPアドレスが沢山並んでます。
 セルBのそれぞれのアドレスを、セルAに一括でハイパーリンクさせる(埋め込む)
方法が知りたいです。
 ご教授、宜しくお願い致します。
0170デフォルトの名無しさん2008/09/08(月) 19:41:35
http://pc11.2ch.net/test/read.cgi/bsoft/1219830884/238
0171デフォルトの名無しさん2008/09/08(月) 20:08:18
>>170
循環参照になってる
0172デフォルトの名無しさん2008/09/08(月) 20:09:26
笑!
0173y2008/09/08(月) 20:21:47
>>169

セルB1にあるアドレスを、セルA1にハイパーリンクとして埋め込むのは、
次のようにすればできます。

Sheet1.Hyperlinks.Add Anchor:=Cells(1, "a"), _
 Address:=Range(1, "b"), _
 TextToDisplay:=Cells(1, "a").Value

(マクロの記録を使って、ハイパーリンクを埋め込む動作を記録してみれば簡単です)

これをループで括って、「1」となっているところ(これは行番号にあたります)を
変えていけば、お好みの行数分操作できます。

0174y2008/09/08(月) 20:25:13
あ! すみません。
169はマルチポストだったんですね。
気づかずに答えてしまいました。

>>169
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
一度ここを読んでおいてください。
0175デフォルトの名無しさん2008/09/08(月) 20:29:35
> Range(1, "b")
0176y2008/09/08(月) 20:29:41
さらに自分のレスの間違いに気づきました。
Address:=Range(1,"b") → Address:=Cells(1,"b")
01771692008/09/08(月) 21:03:00
>>173 マルチ悪かった。
 ツール→マクロ→VBA→標準モジュールに保存した後、
マクロ実行してみたけどできません。
初心者なんでもう少し詳しく教えていただけませんか?
01781692008/09/08(月) 21:54:01
1行だけできましたけど、
行数分操作ができません。
Cells(1, "a"),
1の部分の範囲指定はどうすればいいの?
01791692008/09/08(月) 21:55:21
できればセルを範囲指定して、マクロ実行で
一括で変更できると助かります
0180デフォルトの名無しさん2008/09/08(月) 22:01:32
ググレ
0181デフォルトの名無しさん2008/09/08(月) 22:27:39
>>180
いろいろ調べてもわからねぇよ
質問スレなんだから聞いてるんだろ。。意地悪しねぇで教えろよ。
 その気がないなら返信するな
0182デフォルトの名無しさん2008/09/08(月) 22:45:30
>>179=>>169=>>こないだの池沼 

0183デフォルトの名無しさん2008/09/08(月) 22:46:16
>>181=>>179=>>169=>>こないだの池沼
0184デフォルトの名無しさん2008/09/08(月) 23:16:26
モーグでも行けよ池沼
0185デフォルトの名無しさん2008/09/08(月) 23:40:48
で、また169が暴れるのか?
0186デフォルトの名無しさん2008/09/08(月) 23:43:52
>>181=>>179=>>169=>>184=>>こないだの池沼
0187デフォルトの名無しさん2008/09/09(火) 01:33:11
XMLファイルをVBAで扱いたいんですけど、そういった方面を勉強できるような書籍はないでしょうか。
「XML入門」みたいな本はたくさん見るんですけど、あれって具体的なコーディングについては記述が無いorごく少ないですよね。。。
あってもPHPとかばっかりだし。。。
0188デフォルトの名無しさん2008/09/09(火) 08:48:08
書籍があってもバカじゃどうしようも無い
まともな頭があればVBAでCOM(XMLDOM)使ってXML扱うくらい、
ネットの情報だけで事足りる
0189デフォルトの名無しさん2008/09/09(火) 10:31:32
あるセルからあるセルまでソルバーを使うということをやりたいのですが、
↓のを作ったのですが、出来ません。どうすればいいですか?
SOLVERの参照設定はやりました。


Sub Macro1()

Dim x As Integer

For x = 1 To 5
Range("Cells(x, 3)").Select
SolverOk SetCell:=Cells(x, 5), MaxMinVal:=3, ValueOf:="0", ByChange:=Cells(x, 2)
SolverSolve Userfinish:=True
Next x

End Sub
0190y2008/09/09(火) 19:35:50
>>177

173の後半を、もう少し具体的に書きます。
まずループ用の変数rを宣言し、ここでは例として
For 〜 Next間を5回繰り返すループを示しておきます。

Dim r as Long
For r = 1 to 5
 Sheet1.Hyperlinks.Add Anchor:=Cells(r, "a"), _
  Address:=Cells(r, "b"), _
  TextToDisplay:=Cells(r, "a").Value
Next

繰り返しのたびに、rは1, 2, 3, 4, 5と変化していくので、
上のコードでは1〜5行目に対する操作が行われることになります。
初心者の方なら、「VBA デバッグ」などで検索してみて、この過程を
一つ一つ目で確認する方法を身につけると、上達が早くなります。

For r = Inputbox("開始行?") to InputBox("終了行?")
とすれば、処理をしたい行の範囲を簡単に指定できますが、
もっと便利にしたければ、自分でも他の方法を色々調べてみてください。

質問する時は、どんなに間違っていてもいいので、とにかく何か自分なりに
調べて考えたコードを貼って、それに対するアドバイスを求めた方がいいですよ。
181のようなことを書くと、>>1の★5にあるように、「また丸投げか」と
怒りを買ってしまいます。
0191y2008/09/09(火) 20:01:47
>>189

マクロの記録を使って、ソルバーでやりたい作業をマウスでやってみて、
どんなコードが記録されるか確かめてみてください。(>>1★5)

189のコードについては、
@単純な構文ミス Range("Cells(x, 3)").Select → Cells(x, 3).Select
A目的セルをどこにしたいのか、可変セルをどこにしたいかが不明
です。特に、Aが分からないとアドバイスができません。
0192y2008/09/09(火) 20:03:56
>189

>>1★6」でした。失礼しました。
0193デフォルトの名無しさん2008/09/09(火) 20:44:23
>>190
 ご親切にありがとうございました。
勉強になりました
0194デフォルトの名無しさん2008/09/09(火) 22:41:34
>>191
すみません
目的のセルがCells(x, 5)で、可変セルがCells(x, 2)のつもりでした。

で、@のやつをやったら出来ました。
ありがとうございました。
0195デフォルトの名無しさん2008/09/09(火) 22:50:31
VBA初心者です

何か作ろうと思うのですが…自分では思いつかないので…
何か問題お願いします。
0196デフォルトの名無しさん2008/09/09(火) 22:57:53
>>195
このスレを集計してyの貢献度を調査せよ。
01971952008/09/09(火) 23:04:59
>>196
ラジャ
0198デフォルトの名無しさん2008/09/09(火) 23:34:22
式を教えてください。

A列には文章が入っています。
B列には文章に含まれる単語、C列にはコード番号が入っています。
それぞれ数百〜数千行になります。
A列にはB列の単語のいずれかが含まれる場合には、
単語に対応するC列のコードをD列に表示させたいのですが、
どのような式がよいでしょうか。

VLOOLUPやFINDなどを組み合わせてみても上手くいきません。
お手数ですが、どなたか至急お教え願えますでしょうか。
0199デフォルトの名無しさん2008/09/10(水) 00:31:40
具体的なセルの中身教えろよ
このスットコドッコイ
0200デフォルトの名無しさん2008/09/10(水) 07:26:43
A列…デフォルトの名無しさん、具体的なセルの中身教えろよ、このスットコドッコイ
B列…デフォルト、セル、スットコドッコイ
C列…E46194、H23t55、342421
0201デフォルトの名無しさん2008/09/10(水) 07:44:07
ここはExcel VBAのスレです
0202デフォルトの名無しさん2008/09/11(木) 00:16:48
XPでExcel2003です

c:\aaa 配下にある全てのファイルとサブフォルダを
c:\bbb 配下に全てコピーする事は可能ですか?

また、サンプルコード等ありましたらヒントを頂けると助かります
色々と探してはいるのですが、いまいちピンとこないので
サンプルがあると助かるのですが、、、、

VBAはまだまだ初心者なので未熟者で恐縮です。
0203デフォルトの名無しさん2008/09/11(木) 06:12:54
>>202
>>1★3 ★4
0204デフォルトの名無しさん2008/09/11(木) 19:30:31
たまにmougヲチするんだけど、痛い回答者が多いのね。
0205デフォルトの名無しさん2008/09/11(木) 19:59:47
シートにコンボボックスを貼り付けて
AddItemで追加した後にシートを
Xボタンを押して閉じようとすると
変更を保存しますかと聞かれるんですが
このチェックを外す方法ってあります?

OSはXPでExcel2003です。
0206y2008/09/11(木) 20:15:03
>>198
文章中の、特定の単語の有無の判定なら、たぶんInStr関数で何とかなると思います。
調べてみて使えそうなら使ってください。
>199にもありますが、具体的なデータが分からないとアドバイスしずらいです...
0207y2008/09/11(木) 20:17:20
>>195
どんな業界で働いている方か分かりませんが、
実務に役立つ知識が増すようなテーマを選ぶと、
何かと都合がいいのではないでしょうか。

為替、株式市況、地価、青果水産物市況など、
ネット上にはたくさんの生データが公開されています。
それらを自動的に取得し、テーマに沿って演算し、
レポートを出力するマクロを組むだけでも、
相当勉強になると思います。

やるのであれば、日々刻々と変化する数字の方が面白いです。
例えばある人は、東京に10数箇所ある中央卸売市場の毎日の市況データを
取得し、各市場の卸売価格差をグラフに出力するマクロを作っていました。
仲買業者なら、どこの市場で買い付けをすれば一番安いか、
逆に生産者なら、どこの市場に出荷すれば一番高いか、
一目で分かるというものです。ちなみに彼は商社に勤めていますが、
似たようなことをしている人は結構いるでしょう。

Excelは基本的にデータ処理の道具なので、何を試すにしても、
まずは題材になるデータを見つけてこなければなりません。
ならば自分が、分析対象として最も興味を覚えるデータを選ぶのがベターです。
その上で、自分のスキルに応じた試行錯誤をしてみればいいと思います。
仮に「VBA解説書に載っている多機能な家計簿を作るんだ」と決意したとして、
自分で小遣い帳をつけているほどの人ならともかく、付属CDに入っている
仮想データを使って作っていくようなやり方は、モチベーションが湧きづらい
ように感じます。
0208デフォルトの名無しさん2008/09/11(木) 22:02:38
あれ今日y絶好調だな
0209デフォルトの名無しさん2008/09/11(木) 23:07:26
>>206
×しずらい
○しづらい
◎しにくい
0210デフォルトの名無しさん2008/09/12(金) 01:38:18
>>195
WindowsVBAつくってよ
0211デフォルトの名無しさん2008/09/12(金) 03:36:31
yには、人生相談にすら答えてくれそうな勢いを感じる
0212y2008/09/12(金) 20:05:30
>>205
「シートを Xボタンを押して閉じようとすると」とありますが、
シートに×ボタンはないので、たぶん「ブックを」のつもりでしょうか。

「変更を保存しますか」というメッセージは、ブックを保存した直後の状態であれば
表示されません。この状態は、WorkbookオブジェクトのSavedプロパティをTrueに
することで、強制的に作り出すことができます。
ブックが閉じられる直前に、その操作が自動で行われるようするためには、
ThisWorkbookオブジェクトのコード領域にBeforeCloseイベントを挿入し、
その中でSavedプロパティを操作します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 ThisWorkbook.Saved = True
End Sub
0213デフォルトの名無しさん2008/09/12(金) 20:44:06
うざいな
■ このスレッドは過去ログ倉庫に格納されています