Excel VBA質問スレ Pa ..
116:デフォルトの名無しさん
08/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使わない記法もあるけど)。
117:デフォルトの名無しさん
08/09/06 17:30:42
>>116
113 です。いろいろお教え戴き有難う御座います。
この方法が簡単なので採用させて戴きます。
118:デフォルトの名無しさん
08/09/06 18:07:40
>>114
>>116
113 です。プログラム作成途中ですが、両方とも必要になりましたので、
共に採用させて戴きます。いろいろと、有難う御座いました。
119:デフォルトの名無しさん
08/09/06 21:14:05
スレリンク(tech板:878番)
120:デフォルトの名無しさん
08/09/06 23:37:07
関数は、なんらかの値をかえすべきであるという考えた方が
身に染み付いてるから、SubとVoid関数は非常にきもちわるい。
121:デフォルトの名無しさん
08/09/06 23:38:23
要するに時代遅れですね
122:デフォルトの名無しさん
08/09/07 00:36:46
かえり値もたない関数は、デバッグがむずかしくなるから、医療系の俺の会社じゃ
よほどのことがないかぎり作らない。むしろ121がしろうと
123:デフォルトの名無しさん
08/09/07 00:52:19
>>122
VBAスレで恥ずかしい事いうなよおっさん。
124:デフォルトの名無しさん
08/09/07 01:49:03
LispとかMLでの話なら>>120>>122も分かるが、
VBAで純粋関数型プログラミングは無茶があるだろ、常識的に考えて。
125:89
08/09/07 03:31:47
むっちゃ早く打つ案に似た解決策で自己解決しました。
必殺コピペです。
グローバルエリアに変数定義しようとしたらDimと打った時点でエラーメッセージが頻発
変数書こうとしても打っている途中でメッセージ頻発して書けない。
どこかにエラーチェックのタイミングプロパティがあると思うがコピペで解決したから諦めようかと思います
126:デフォルトの名無しさん
08/09/07 07:55:30
そういや、functionしか存在しない言語もあるな。
127:デフォルトの名無しさん
08/09/07 10:23:41
よくいるんだよね。VBにしかVariant型がないと思ってる自称上級者
128:デフォルトの名無しさん
08/09/07 14:27:52
ファイルを開かずにアクティブシートを変更するにはどうしたら良いでしょうか。
AccessのTransferSpreadsheetでエクセルの任意シートへデータを出力していますが、
エクセルファイルを開いた時に、値を出力したシートがアクティブになっているようにしたいのです。
129:128
08/09/07 14:30:04
ついでに読み取り専用属性の操作もできればサイコーです
130:デフォルトの名無しさん
08/09/07 14:45:07
please tell ass in Japanese...
Sheets("hoge").Activate
Sheets("hoge").SaveAs "c:\hoge.xlsx", xlWorkbookNormal, , , True
131:128
08/09/07 15:15:51
えー、ファイルを開かない状態でアクティブシートを変更したいのです。
そのやり方だとインデックスエラーになっちゃうんですけど。
132:デフォルトの名無しさん
08/09/07 15:26:27
Excelオブジェクト生成
ファイルオープン(非表示)
シートをアクティブにする
保存
133:デフォルトの名無しさん
08/09/07 15:30:41
ここっていちいち一から百まで説明しないといけないから疲れるな
結局ファイルを開かなきゃいけないってことですね。どうもありがとうございました。
134:デフォルトの名無しさん
08/09/07 15:39:47
偉そうに言ってますな w
135:デフォルトの名無しさん
08/09/07 15:45:40
そりゃそうだ。エスパーなんてここにはいない。
136:デフォルトの名無しさん
08/09/07 15:46:46
ここの奴らほとんど、ろくな知識も無いのに
知ったか振っててうざいんだもん
これぐらい言わせなよ
137:デフォルトの名無しさん
08/09/07 15:51:18
うわぁ・・・低脳すぎて煽るきにもならない
138:128
08/09/07 15:52:01
あと別におまえらがエスパーである必要はねーけど
言われた事から、相手がなぜそうしたいのか、ではどういう方法が適切かくらい想像しろよ、と思うね
おまえら自分の知ってることが唯一の回答であるようにこじつけてるだけだろ。
そういうのをバカの一つ覚えって言うんだよ。
でも回答ありがとう。じゃね。
139:デフォルトの名無しさん
08/09/07 15:52:32
っていうかxlsファイルを開くのとExcelのGUIを開くのを同じことだと思っている低脳っているんだね
140:>137
08/09/07 15:53:30
じゃあ書くなよウスノロw
141:デフォルトの名無しさん
08/09/07 15:53:47
うわぁ・・・ひどい池沼ですね・・・
142:デフォルトの名無しさん
08/09/07 15:55:07
日本語で質問できるようになったら書き込みしような。
143:デフォルトの名無しさん
08/09/07 15:56:22
高卒とかFランは書き込みできないようなフィルタかけてくれよ
144:デフォルトの名無しさん
08/09/07 15:59:21
盛り上がってますね
145:デフォルトの名無しさん
08/09/07 16:01:56
>>133
最低限1から5くらいまで説明しようぜ。
俺らお前のお母さんじゃないんだからよ。
146:デフォルトの名無しさん
08/09/07 16:02:48
というより、
出来ないことは出来ないと説明した上で代替案を示すなら
ここまで荒れないと思うのだが。
条件に反することを回答するからこうなる
147:デフォルトの名無しさん
08/09/07 16:03:39
>>132
でできると思うぜ。
148:デフォルトの名無しさん
08/09/07 16:10:34
>>145
えっ?
>128を1から5くらいの説明で理解できるのか?
最近のお母さんてスペック高いんだな!
149:デフォルトの名無しさん
08/09/07 16:11:33
OBJ.FileOpenは知ってたけどコードがごちゃごちゃするから嫌いなのよ。
他にもっとシンプルなやり方が無いのかな、って思っただけ。
150:デフォルトの名無しさん
08/09/07 16:12:30
>>147
非表示だけど、ファイル開いてるからNGだろ。
想像力のない俺からすれば、元の質問自体がNGだけどな。
151:デフォルトの名無しさん
08/09/07 16:13:04
変な知ったかいいわけ始めたぞ
152:デフォルトの名無しさん
08/09/07 16:14:32
ファイル開かずにファイルを変更するなんて方法があったら俺が知りたいな
153:デフォルトの名無しさん
08/09/07 16:16:31
128ってそんなに難しいか
まさかとは思うがプログラム板なのにAccessのVBAを知らん奴がいるのか
154:デフォルトの名無しさん
08/09/07 16:20:31
簡単だぞ。質問がヘタなだけ。で質問の答えに対して実装できるスキルもないだけ。
155:デフォルトの名無しさん
08/09/07 16:23:38
要するに低脳というわけですね。分かります。
156:デフォルトの名無しさん
08/09/07 16:24:49
盛り上がってますなあ
157:128
08/09/07 16:38:58
結局お前らAccessVBAが理解できなかっただけ佳代w
低能エクセル厨乙w
158:デフォルトの名無しさん
08/09/07 16:49:47
スレタイ100回音読してみろ。
それから自分の質問と回答を100回音読しろ。
159:デフォルトの名無しさん
08/09/07 16:56:43
下手な釣りだなあ。次の質問どうぞ。
160:デフォルトの名無しさん
08/09/07 18:49:05
>>128
が見えない
161:デフォルトの名無しさん
08/09/07 20:20:00
excel vba 極めたいのですけど
お勧めの参考書はありますか?元制御系プログラマで
プログラミングの基本は充分できています。
技術評論社のポケットリファレンスはどうですか?
162:デフォルトの名無しさん
08/09/07 20:25:06
便乗質問・・・。
win32APIを勉強したいのですが、お勧めの本ってありますか?
使用目的はExcel VBAで呼び出す事です。
163:デフォルトの名無しさん
08/09/07 20:29:47
Excel VBAによるWin32 APIプログラミング入門 (単行本)
ぐぐることも出来ないの?
164:デフォルトの名無しさん
08/09/07 23:32:31
質問者も回答者もバカが多いな
165:デフォルトの名無しさん
08/09/08 00:05:08
お前ほどじゃないがな
166:デフォルトの名無しさん
08/09/08 03:03:14
だな
167:デフォルトの名無しさん
08/09/08 03:08:05
157 名前:128[] 投稿日:2008/09/07(日) 16:38:58
結局お前らAccessVBAが理解できなかっただけ佳代w
低能エクセル厨乙w
こいつリアルでもこんな感じなんだろうな
168:デフォルトの名無しさん
08/09/08 07:45:44
>>162
マジレスするとWin32APIの為に本を買うのはもったいない。
MSDNとネット上のAPIサンプル集とかで十分。
169:デフォルトの名無しさん
08/09/08 19:00:04
URLリンク(detail.chiebukuro.yahoo.co.jp)
上のようなことの逆は可能ですか?
例えば、セルAに映画のタイトルが縦に並んでて、
セルBにはその映画の詳細が見れるHPアドレスが沢山並んでます。
セルBのそれぞれのアドレスを、セルAに一括でハイパーリンクさせる(埋め込む)
方法が知りたいです。
ご教授、宜しくお願い致します。
170:デフォルトの名無しさん
08/09/08 19:41:35
スレリンク(bsoft板:238番)
171:デフォルトの名無しさん
08/09/08 20:08:18
>>170
循環参照になってる
172:デフォルトの名無しさん
08/09/08 20:09:26
笑!
173:y
08/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」となっているところ(これは行番号にあたります)を
変えていけば、お好みの行数分操作できます。
174:y
08/09/08 20:25:13
あ! すみません。
169はマルチポストだったんですね。
気づかずに答えてしまいました。
>>169
Wikipedia項目リンク
一度ここを読んでおいてください。
175:デフォルトの名無しさん
08/09/08 20:29:35
> Range(1, "b")
?
176:y
08/09/08 20:29:41
さらに自分のレスの間違いに気づきました。
Address:=Range(1,"b") → Address:=Cells(1,"b")
177:169
08/09/08 21:03:00
>>173 マルチ悪かった。
ツール→マクロ→VBA→標準モジュールに保存した後、
マクロ実行してみたけどできません。
初心者なんでもう少し詳しく教えていただけませんか?
178:169
08/09/08 21:54:01
1行だけできましたけど、
行数分操作ができません。
Cells(1, "a"),
1の部分の範囲指定はどうすればいいの?
179:169
08/09/08 21:55:21
できればセルを範囲指定して、マクロ実行で
一括で変更できると助かります
180:デフォルトの名無しさん
08/09/08 22:01:32
ググレ
181:デフォルトの名無しさん
08/09/08 22:27:39
>>180
いろいろ調べてもわからねぇよ
質問スレなんだから聞いてるんだろ。。意地悪しねぇで教えろよ。
その気がないなら返信するな
182:デフォルトの名無しさん
08/09/08 22:45:30
>>179=>>169=>>こないだの池沼
な
183:デフォルトの名無しさん
08/09/08 22:46:16
>>181=>>179=>>169=>>こないだの池沼
184:デフォルトの名無しさん
08/09/08 23:16:26
モーグでも行けよ池沼
185:デフォルトの名無しさん
08/09/08 23:40:48
で、また169が暴れるのか?
186:デフォルトの名無しさん
08/09/08 23:43:52
>>181=>>179=>>169=>>184=>>こないだの池沼
187:デフォルトの名無しさん
08/09/09 01:33:11
XMLファイルをVBAで扱いたいんですけど、そういった方面を勉強できるような書籍はないでしょうか。
「XML入門」みたいな本はたくさん見るんですけど、あれって具体的なコーディングについては記述が無いorごく少ないですよね。。。
あってもPHPとかばっかりだし。。。
188:デフォルトの名無しさん
08/09/09 08:48:08
書籍があってもバカじゃどうしようも無い
まともな頭があればVBAでCOM(XMLDOM)使ってXML扱うくらい、
ネットの情報だけで事足りる
189:デフォルトの名無しさん
08/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
190:y
08/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にあるように、「また丸投げか」と
怒りを買ってしまいます。
191:y
08/09/09 20:01:47
>>189
マクロの記録を使って、ソルバーでやりたい作業をマウスでやってみて、
どんなコードが記録されるか確かめてみてください。(>>1★5)
189のコードについては、
@単純な構文ミス Range("Cells(x, 3)").Select → Cells(x, 3).Select
A目的セルをどこにしたいのか、可変セルをどこにしたいかが不明
です。特に、Aが分からないとアドバイスができません。
192:y
08/09/09 20:03:56
>189
「>>1★6」でした。失礼しました。
193:デフォルトの名無しさん
08/09/09 20:44:23
>>190
ご親切にありがとうございました。
勉強になりました
194:デフォルトの名無しさん
08/09/09 22:41:34
>>191
すみません
目的のセルがCells(x, 5)で、可変セルがCells(x, 2)のつもりでした。
で、@のやつをやったら出来ました。
ありがとうございました。
195:デフォルトの名無しさん
08/09/09 22:50:31
VBA初心者です
何か作ろうと思うのですが…自分では思いつかないので…
何か問題お願いします。
196:デフォルトの名無しさん
08/09/09 22:57:53
>>195
このスレを集計してyの貢献度を調査せよ。
197:195
08/09/09 23:04:59
>>196
ラジャ
198:デフォルトの名無しさん
08/09/09 23:34:22
式を教えてください。
A列には文章が入っています。
B列には文章に含まれる単語、C列にはコード番号が入っています。
それぞれ数百〜数千行になります。
A列にはB列の単語のいずれかが含まれる場合には、
単語に対応するC列のコードをD列に表示させたいのですが、
どのような式がよいでしょうか。
VLOOLUPやFINDなどを組み合わせてみても上手くいきません。
お手数ですが、どなたか至急お教え願えますでしょうか。
199:デフォルトの名無しさん
08/09/10 00:31:40
具体的なセルの中身教えろよ
このスットコドッコイ
200:デフォルトの名無しさん
08/09/10 07:26:43
A列…デフォルトの名無しさん、具体的なセルの中身教えろよ、このスットコドッコイ
B列…デフォルト、セル、スットコドッコイ
C列…E46194、H23t55、342421
201:デフォルトの名無しさん
08/09/10 07:44:07
ここはExcel VBAのスレです
202:デフォルトの名無しさん
08/09/11 00:16:48
XPでExcel2003です
c:\aaa 配下にある全てのファイルとサブフォルダを
c:\bbb 配下に全てコピーする事は可能ですか?
また、サンプルコード等ありましたらヒントを頂けると助かります
色々と探してはいるのですが、いまいちピンとこないので
サンプルがあると助かるのですが、、、、
VBAはまだまだ初心者なので未熟者で恐縮です。
203:デフォルトの名無しさん
08/09/11 06:12:54
>>202
>>1★3 ★4
204:デフォルトの名無しさん
08/09/11 19:30:31
たまにmougヲチするんだけど、痛い回答者が多いのね。
205:デフォルトの名無しさん
08/09/11 19:59:47
シートにコンボボックスを貼り付けて
AddItemで追加した後にシートを
Xボタンを押して閉じようとすると
変更を保存しますかと聞かれるんですが
このチェックを外す方法ってあります?
OSはXPでExcel2003です。
206:y
08/09/11 20:15:03
>>198
文章中の、特定の単語の有無の判定なら、たぶんInStr関数で何とかなると思います。
調べてみて使えそうなら使ってください。
>199にもありますが、具体的なデータが分からないとアドバイスしずらいです...
207:y
08/09/11 20:17:20
>>195
どんな業界で働いている方か分かりませんが、
実務に役立つ知識が増すようなテーマを選ぶと、
何かと都合がいいのではないでしょうか。
為替、株式市況、地価、青果水産物市況など、
ネット上にはたくさんの生データが公開されています。
それらを自動的に取得し、テーマに沿って演算し、
レポートを出力するマクロを組むだけでも、
相当勉強になると思います。
やるのであれば、日々刻々と変化する数字の方が面白いです。
例えばある人は、東京に10数箇所ある中央卸売市場の毎日の市況データを
取得し、各市場の卸売価格差をグラフに出力するマクロを作っていました。
仲買業者なら、どこの市場で買い付けをすれば一番安いか、
逆に生産者なら、どこの市場に出荷すれば一番高いか、
一目で分かるというものです。ちなみに彼は商社に勤めていますが、
似たようなことをしている人は結構いるでしょう。
Excelは基本的にデータ処理の道具なので、何を試すにしても、
まずは題材になるデータを見つけてこなければなりません。
ならば自分が、分析対象として最も興味を覚えるデータを選ぶのがベターです。
その上で、自分のスキルに応じた試行錯誤をしてみればいいと思います。
仮に「VBA解説書に載っている多機能な家計簿を作るんだ」と決意したとして、
自分で小遣い帳をつけているほどの人ならともかく、付属CDに入っている
仮想データを使って作っていくようなやり方は、モチベーションが湧きづらい
ように感じます。
208:デフォルトの名無しさん
08/09/11 22:02:38
あれ今日y絶好調だな
209:デフォルトの名無しさん
08/09/11 23:07:26
>>206
×しずらい
○しづらい
◎しにくい
210:デフォルトの名無しさん
08/09/12 01:38:18
>>195
WindowsVBAつくってよ
211:デフォルトの名無しさん
08/09/12 03:36:31
yには、人生相談にすら答えてくれそうな勢いを感じる
212:y
08/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
213:デフォルトの名無しさん
08/09/12 20:44:06
うざいな
214:デフォルトの名無しさん
08/09/12 20:51:26
>>213
お前がな
215:205
08/09/12 22:35:11
なるほど。Savedプロパティですか。
ありがとうございました。
216:デフォルトの名無しさん
08/09/13 00:10:19
確かにうざいわ
217:y
08/09/13 02:54:40
・・・
218:デフォルトの名無しさん
08/09/13 03:49:12
何コイツ
219:デフォルトの名無しさん
08/09/13 06:49:48
煽りなんか気にすんな。
220:デフォルトの名無しさん
08/09/13 07:14:09
未だに169が粘着してる
221:デフォルトの名無しさん
08/09/13 08:56:37
>>217は、マジでうざいなw
222:デフォルトの名無しさん
08/09/13 09:06:33
まぁ、2chではあまり見ないキャラであることは確かだな。
嫌ならNGしとけ。
223:デフォルトの名無しさん
08/09/13 09:25:58
凄い粘着だな。。。おい。
224:デフォルトの名無しさん
08/09/13 10:01:34
>>218-223をNG指定した
225:デフォルトの名無しさん
08/09/13 11:55:22
マクロなんですけど、行挿入のマクロを作りたいんです。
だけど、挿入する行をセルの値から指定したい場合はどうすればよいですか?
例
B2 = 3
3行目と4行目の間に行挿入をするようB2をつかってさせる。
226:デフォルトの名無しさん
08/09/13 13:16:55
Dim i As Integer
i = Range("B2")
Rows(i).Insert
227:デフォルトの名無しさん
08/09/13 13:18:30
これだけでもいけるな
Rows(Range("B2")).Insert
228:デフォルトの名無しさん
08/09/13 14:07:04
>>226-227
助かります、ありがとうございました。
229:y
08/09/13 16:13:47
・・・
230:デフォルトの名無しさん
08/09/13 22:03:03
yそろそろコテにしたら?なりすましが出るくらい名が知れてきたんだからさ
231:デフォルトの名無しさん
08/09/13 22:16:44
yがコテじゃなかったら何だと言うのだ
232:デフォルトの名無しさん
08/09/13 22:33:41
トリップつけたら?ってことじゃね?
233:デフォルトの名無しさん
08/09/13 23:38:26
いい加減、yの話題やめろよ
234:デフォルトの名無しさん
08/09/14 00:06:42
うざすぎ
235:デフォルトの名無しさん
08/09/14 03:08:08
エクセルのシートに画像をドラッグした時に、指定場所に指定のサイズに変換したいのですができますか?
また、工事管理を行っていて、工期の数日前になると警告文が出るようにできるのでしょうか?
236:デフォルトの名無しさん
08/09/14 05:20:37
> エクセルのシートに画像をドラッグした時に、指定場所に指定のサイズに変換したいのですができますか?
「シートに画像をドラッグした時に」というイベントが用意されてないから、
「ドラッグした」ら自動で処理するってのは無理
「シートに画像をドラッグしてからボタンを押したら」なら可能だが
> また、工事管理を行っていて、工期の数日前になると警告文が出るようにできるのでしょうか?
可能だがExcelでやるべきことじゃないな
Excelでやるってことは、Excelとその警告マクロを作ったブックを立ち上げてないと警告文出ないわけだし
やるとすれば、「n日前」ではなく、「n日前以降、最初にExcelを立ち上げたとき」という条件になるかな
237:デフォルトの名無しさん
08/09/14 16:10:42
前者:できない
後者:できない
238:デフォルトの名無しさん
08/09/14 17:37:16
EXCEL関数についてお教えください
あいうえお(abc)
かきくけ(ほげほげ)
さしすせそたちつ(nekdk)
という行がありまして、()とその中の文字列だけを全部消したいです。
()は全角です。()内の文字、文字数数がことなるので置換が使えないでいます。。
239:デフォルトの名無しさん
08/09/14 18:02:25
マッチコレクション
240:デフォルトの名無しさん
08/09/14 18:10:17
>>238
>>1 ★2
241:デフォルトの名無しさん
08/09/14 21:03:02
>>238
関数ではないけど
ツール→区切り位置で区切り文字を ( にすると
( の前後で別のセルに分かれるからそれではダメかな?
242:デフォルトの名無しさん
08/09/14 22:58:50
VBAで検索システム的なものを作っています。
行き詰ってしまったので何かアドバイスをいただければと思います。
OSはXPでエクセルのバージョンは2002です。よろしくお願いします。
ブック内に「メイン画面」「情報A」「情報B」という3つのシートがあります。
「メイン画面」のB5セルに会員番号(K_Ban)を入力してマクロを実行すると「情報A」「情報B」から該当の会員番号に関する情報が「メイン画面」の任意のセルに代入されるというものです。
ただし「メイン画面」の形式の都合で、該当する「情報A」のうち、上から3件のみを出力させて4件目以降はカットしています。(下記コード参照)
「情報B」は「種別」という項目があり、「野菜」「肉類」「魚類」…などの分類が30種類ほどあります。
「情報B」についても、各種別毎に3件目以降はカットしたいのですが、行き詰っています。
すなわち、会員番号1について「情報B」は30件あり、野菜25件、肉類5件があるとすると
「メイン画面」には野菜3件、肉類3件分の情報を出力させたいのです。
また、種別については、今後随時変更があるので「種別毎に変数を設定して直接数える」のではないようなコードにしたいと思っています。
243:デフォルトの名無しさん
08/09/14 23:00:25
Public Sub 検索()
Dim K_Ban As String
Dim MyRange As Range
Dim MyAddress As String
Dim cnt As Integer
K_Ban = Worksheets("メイン画面").Range("B5")
Set MyRange = Worksheets("情報A").Range("A1:A50").Find(K_Ban, LookAt:=xlWhole)
MyAddress = MyRange.Address
cnt = 8
Do
Worksheets("メイン画面").Cells(cnt, 3) = MyRange.Offset(0, 0).Value
Worksheets("メイン画面").Cells(cnt, 4) = MyRange.Offset(0, 1).Value
Worksheets("メイン画面").Cells(cnt, 5) = MyRange.Offset(0, 2).Value
cnt = cnt + 1
If cnt = 11 Then
Exit Do
End If
Set MyRange = Worksheets("情報A").Range("A1:A50").FindNext(MyRange)
Loop Until MyRange.Address = MyAddress
End Sub
244:デフォルトの名無しさん
08/09/14 23:25:44
シートの構造書くか、Bookをどこかにアップ
245:デフォルトの名無しさん
08/09/15 08:41:27
だよな普通
246:y
08/09/15 11:18:44
>>242
|A列. |B列. |C列. |D列. |E列.
01 | 0123456789| .| .| .|
02 | .| .| .| .|
03 | .| .| .| .|
04 | .| .| .| .|
05 | .| .| .| .|
シート内のデータ内容を説明するために、以前こんなテンプレを使っている人がいました。
「情報A」「情報B」シートの中身を、文章で説明するより楽だと思ったら使ってください。
247:242
08/09/15 13:54:22
>>244-246
以下のようなシート構造で、種別→日付で並べ替えてあります。
A B C D
番号 種別 データ1 データ2
1 肉類 豚肉 20080915
1 肉類 牛肉 20080912
1 肉類 鶏肉 20080801
1 魚類 その他 20080401
2 肉類 猪肉 20080905
2 野菜 その他 20080802
248:y
08/09/15 16:03:53
>>247
Sub Sample()
Dim K_Ban As Long: K_Ban = Worksheets("メイン画面").Range("B5")
Dim r As Long
Dim shubetsu As String
Dim shubetsuCnt As Integer
With ThisWorkbook.Sheets("情報B")
.Range(.Cells(1, 1), .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter Field:=1, Criteria1:=K_Ban
r = 2
Do While .Cells(r, 1) <> ""
If .Rows(r).Hidden = False Then
If shubetsu <> .Cells(r, 2) Then
shubetsu = .Cells(r, 2)
shubetsuCnt = 1
ElseIf shubetsuCnt < 3 Then
shubetsuCnt = shubetsuCnt + 1
Else
.Rows(r).Hidden = True
End If
End If
r = r + 1
Loop
.Range(.Cells(2, 1), .Cells(.Rows.Count, 4).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy _
Destination:=ThisWorkbook.Sheets("メイン画面").Cells(8, 3) '←任意のコピー先セル
.AutoFilterMode = False
End With
End Sub
249:y
08/09/15 16:04:42
上のコードは、条件に合わない行を非表示にしていき、最終的に表示されている行だけを
「メイン画面」の任意のセルにコピーする、という考え方です。デバッガでステップ実行していけば、
不要な行が非表示になっていく様子がよく分かると思います。不便なところは改良してみてください。
なお、データは「種別→日付で並べ替えてあります」とありますが、見たところ「番号→種別→日付」で並んで
いますね。上のコードは、そう並んでいる必要があります。
他のやり方を提案する方もいるかもしれませんので、そちらも参考にしてください。
250:デフォルトの名無しさん
08/09/15 18:09:00
先日行挿入について質問したものです。
C3で指定した値の行に行を挿入して、D3,Fj,D3で与えた値を挿入した行のHi、Fi,Iiに値を入れたいのですが、どこが間違っていますでしょうか、ご指摘お願いします。
Sub Main
Rows(Range("C3")).Insert
Dim i As Integer
Dim j As Integer
i = Range("C3")
Range("D3").Copy Destination:=Range("Hi")
j = i-1
Range("Fj").Copy Destination:=Range("Fi")
i = Range("E3")
Range("D3").Copy Destination:=Range("Ii")
END SUB
このように作ったのですが、うまくいきません。
251:デフォルトの名無しさん
08/09/15 18:39:29
>>250
まず、Range("Hi")というセルの指定のやり方はない
Rangeを使いたいんなら、Range("H" & i )
ほかには、Cells(i, 8)、もしくは、Cells(i, "H")
解説サイトいっぱいあるから基本的とこから少し勉強したほうがいいよ
252:デフォルトの名無しさん
08/09/15 19:29:45
エクセルの使い方もロクに知らない俺が
今日これからVBAの勉強を力尽きるまでやってみるぜ。
困ったときはお前らだけが頼りだ。
253:デフォルトの名無しさん
08/09/16 06:39:12
>>251
ご指摘、解説ありがとうございます。
出来る限り自分でやるようにしてみます。
254:242
08/09/16 23:49:49
>>248
ありがとうございます。
(もしかしたら上級者の方には普通なのかもしれませんが)
自分には全くない発想でした。勉強になりました。
お示しいただいたコードを元に自分でも勉強したいと思います。
255:デフォルトの名無しさん
08/09/17 00:16:06
そう考えること自体は不思議ではないと思うよ。
現によその言語ではそういうことができるものだってある(Perlとか)。
いずれにせよVBAはそういうことをしないということに変わりはないけれど。
256:デフォルトの名無しさん
08/09/17 01:45:49
ねぇねぇみんな。
Microsoft Forms 2.0 TextBoxだと右クリックしてもメニューが出てこないよね。
出てくるようにしたいんだけど、何かいい知恵あるかな?
257:デフォルトの名無しさん
08/09/17 17:14:06
すいません、質問です。
1004エラーが出ます。(´Д`;
worksheet記述を加えてみたり、色々試してみたのですが消えません。
作りたいものとしては、
A列を縦にチェックして異なる文字列が出てきたら罫線(太線)を引く、
というものです。
突っ込み、お願いします。
Sub test()
Dim i As Integer
Dim st_flag As Byte
Dim range1 As Range
st_flag = 0
i = 3
Do While Cells(i, 1).Value <> ""
If (st_flag = 1) Then
If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) Then
Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium
End If
Else
st_flag = 1 ''最初の1セルは比較をしない
End If
i = i + 1
Loop
End Sub
258:デフォルトの名無しさん
08/09/17 19:04:30
読むのめんどいからどの行でエラーなのか教えて
259:デフォルトの名無しさん
08/09/17 19:37:16
Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium
↓
Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).Weight = xlMedium
260:デフォルトの名無しさん
08/09/17 20:29:58
実行時エラー '1004':
Border クラスの LineStyle プロパティを設定できません。
これくらいコピペしようぜ
261:デフォルトの名無しさん
08/09/17 20:30:38
時間の許す限りエラーの内容くらい小一時間考えよう
262:デフォルトの名無しさん
08/09/17 20:37:01
質問者と回答者よりも講釈師の方がが多いスレ
263:デフォルトの名無しさん
08/09/17 21:21:15
板全体に言えるわけだが
すれ違い甚だしい質問だとか煽りだとか
ここはまだまし
264:デフォルトの名無しさん
08/09/17 21:42:26
>>262
質問者 回答者 講釈師
貴方はどれに該当しますか?
265:デフォルトの名無しさん
08/09/17 21:43:55
ヌルポ
266:デフォルトの名無しさん
08/09/17 21:51:22
ポルヌ
267:デフォルトの名無しさん
08/09/17 21:52:59
>>262は煽り専門要員だよ
268:y
08/09/17 23:26:36
>>254
念のため補足しますが、>>248のコードは決して最善の方法ではありません。
合致する会員番号でふるいをかけ、その中から種別ごとに最大3つまでの
アイテムを取り出していく取捨選択の過程を、視覚的に理解するために利用してください。
仕組みが単純なので、コードが短くて済むというのが唯一の利点ですが、
マスタデータの行の表示・非表示を切り替えて実現する「検索システム」というのは、
>255でも指摘をいただいていますが、普通はやらないでしょう。
(数がたくさんになると、けっこう動作が重くなってしまいます)
まじめに実装するとすれば、取捨選択の考え方はそのまま生かすとしても、
転記の仕方に改良の余地があります。適当な二次元配列を用意して、
取捨選択したデータを一行ずつ追加していき、最終的に配列ごと任意のセルに
書き込む、というのが一般的なやり方になると思います。
>>256
TextBoxのMouseDownイベントプロシージャ内で、Commandbars("登録されているCommandbar名").ShowPopup を
実行すれば、そのタイミングで表示されます。ユーザー設定のショートカットメニューも表示できます。
ちなみにMouseDownイベント発生時は、Button引数 が 定数xlSecondaryButton と等しければ、右クリックと判断できます。
269:デフォルトの名無しさん
08/09/18 01:50:36
さすがy
270:デフォルトの名無しさん
08/09/18 05:40:38
うぜぇ
271:デフォルトの名無しさん
08/09/18 09:07:55
>>257っす。
>>258
申し訳ないっす。ブレークポイントで調べてみたらここらしいです。
If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) Then
→ Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium
End If
>>259
うぉ、できました!
罫線の種類とか太さとか、指定する先が間違っていたのですね。
>>260
そこまで親切に表示されませんでした。orz
出てきたのは、
実行時エラー '1004':
アプリケーション定義またはオブジェクト定義エラーです。
でした。あ、verはexcel2003です。
>>261
小一時間考えて駄目だったので聞いてみました。orzorz
Cのコンソール系しか打ったことが無いので、感覚的につかめなくて。
ともあれ、無事にできたので。
ありがとうございました。m(_ _)m
272:デフォルトの名無しさん
08/09/18 14:26:11
>>266
!ッガ
273:デフォルトの名無しさん
08/09/18 18:15:17
>>242をわざわざVBA使ってまでやってる理由が分からんな…
関数だけで何とでもなりそうだw
274:デフォルトの名無しさん
08/09/18 19:42:37
>適当な二次元配列を用意して、
>取捨選択したデータを一行ずつ追加していき、最終的に配列ごと任意のセルに
>書き込む、というのが一般的なやり方になると思います。
はぁ?
何でお前ごときが一般論を語れるんだよ?
275:デフォルトの名無しさん
08/09/18 20:49:36
>>274
お前ごときがここにくんな
276:デフォルトの名無しさん
08/09/18 22:30:24
今独学でVBAを学んでいます。
皆さんにお聞きしたいのですが、
独学で学ぶにお薦めの本はありますか?
大村あつし著 かんたんプログラミング EXCEL VBA基礎編
と できるシリーズのVBAを読んでいます。
277:デフォルトの名無しさん
08/09/18 23:40:24
>>276
漏れの場合はVBAに関する知識はほとんどネットやヘルプで調べたものだったりするし・・・
VBとかやってるならオブジェクトブラウザとヘルプだけでも何とかなると思う
便利なテクニックとかはネットで拾い集めて行く
最初に手に入れたVBAの本に載ってたサンプルがコンパイル通らなかったから
本は全然信用してないだけだけどなw
でも1冊だけ役に立った本があったな・・・
「Excel VBA逆引き大全」とかだったかな?
278:デフォルトの名無しさん
08/09/19 01:19:38
すいません。
VBA作成経験なく、ここを答えを求める場として
使うことに申し訳なく思っています。
複数のExcelファイルを指定する。
当該ファイルを新ブックにして保存する。
→その際、シート名が重複しても問題なし
新ブックのファイル名はあらかじめ指定したものを
このようなマクロをつくることは可能でしょうか。
前述のとおり、まったく経験なしなので、
サンプル、たたき台程度で構いませんので、
ご教示いただけたら嬉しいです。
279:デフォルトの名無しさん
08/09/19 01:57:51
相変わらずyきめぇw
280:デフォルトの名無しさん
08/09/19 02:05:09
>>278
さっぱり意味がわかりません。
281:デフォルトの名無しさん
08/09/19 02:08:42
>>277
>VBとかやってるならオブジェクトブラウザとヘルプだけでも何とかなると思う
できる奴の戯言だな
282:デフォルトの名無しさん
08/09/19 04:03:48
>>278
簡単だよ。
283:デフォルトの名無しさん
08/09/19 06:07:09
>>275
アホ?
284:デフォルトの名無しさん
08/09/19 06:25:29
>>281
いや普通できると思うできないのは文盲
285:デフォルトの名無しさん
08/09/19 06:26:23
>>283
ゆとり乙
286:デフォルトの名無しさん
08/09/19 06:37:00
ここの奴ら「簡単」だの「出来て当たり前」だの口ばかり達者で
入門書レベルの事しか回答出来ないから笑える
287:デフォルトの名無しさん
08/09/19 06:43:18
>>286
お前だろそれ
288:デフォルトの名無しさん
08/09/19 07:01:00
あらあらw
289:デフォルトの名無しさん
08/09/19 07:04:32
vbogl.tlbのedxさんめちゃくちゃいい人だ。メールしたら速攻返事きたw
290:デフォルトの名無しさん
08/09/19 07:05:18
誤爆した
291:デフォルトの名無しさん
08/09/19 07:06:03
>>278
複数ファイルのブック内のシートを結合するマクロなら昔適当に作ったのがあるけど
292:デフォルトの名無しさん
08/09/19 08:52:57
>>278
まとめると
複数ファイルのブック内のシートを結合する
シート名は重複している場合がある
だよな?
シート数は全部でどのくらいになるんだ?
あまり多いと1つのブックに収まらないよ
293:デフォルトの名無しさん
08/09/19 09:10:07
>>292
すいません、追加・変更があります。
○○システムの情報 ブック*2
□□システムの情報 ブック*2
(全部で5システム)
上記1ブックに1シートのみ
これをシステムごとに1ブックとして新規に保存。
なので、計5ブックができる。
これを一回でやりたいです。
下記の情報をあらかじめ指定(変更可)
- 各システムの情報ブック
- 新ブックの名前
を考えています。
294:292
08/09/19 10:40:41
>>293
かなり手抜きだが書いてみた
コピー後のシート名は指定するように作った
マクロを入れるブックに
A列(ファイルバス)| B列(コピー後のシート名)
○○システム
C:\A1.xls| Sheet○○1
C:\B1.xls| Sheet○○2
C:\C1.xls
○×システム
C:\A2.xls| Sheet○×1
C:\B2.xls| Sheet○×2
C:\C2.xls
といった感じにデータ入れて以下のマクロを動かす
(AとBはコピー元Cがコピー先)
295:292
08/09/19 10:41:55
Sub Macro1()
Dim wkAWorkbook As Workbook
Dim wkBWorkbook As Workbook
Dim wkCWorkbook As Workbook
Dim i As Long
For i = 0 To 1
With ThisWorkbook.Worksheets(1)
'コピー元1つ目を開く
Set wkAWorkbook = Workbooks.Open(.Cells(2 + i * 4, 1))
'1つ目を新規ブックにコピー
wkAWorkbook.Worksheets(1).Copy
Set wkCWorkbook = ActiveWorkbook
'コピーしたシートをリネーム
ActiveSheet.Name = .Cells(2 + i * 4, 2)
改行多すぎので次レスに続く
296:292
08/09/19 10:43:09
'コピー元2つ目を開く
Set wkBWorkbook = Workbooks.Open(.Cells(3 + i * 4, 1))
'2つ目を上でコピーしたブックにコピー
wkBWorkbook.Worksheets(1).Copy after:=wkCWorkbook.Sheets(1)
'コピーしたシートをリネーム
ActiveSheet.Name = .Cells(3 + i * 4, 2)
'開いた時に見栄えが悪いので1つ目のシートを選択
wkCWorkbook.Sheets(1).Select
'名前をつけて保存
wkCWorkbook.SaveAs (.Cells(4 + i * 4, 1))
'終了処理
wkAWorkbook.Close
Set wkAWorkbook = Nothing
wkBWorkbook.Close
Set wkBWorkbook = Nothing
wkCWorkbook.Close
Set wkCWorkbook = Nothing
End With
Next i
End Sub
専ブラじゃないのでずれて見づらいかも知れんなw
297:デフォルトの名無しさん
08/09/19 20:49:06
頭悪そうなコード
298:デフォルトの名無しさん
08/09/19 21:05:31
変数名のつけかたって、読んだ参考書や勉強したサイトにけっこう影響されない?
299:デフォルトの名無しさん
08/09/19 21:08:44
変数名のセンスが悪いな
300:y
08/09/19 21:23:03
>>276
「VBAの絵本」(アンク)
アンクの絵本シリーズは、その言語の仕組みや考え方を、豊富なイラストを用いて直感的に
伝える工夫がなされています。他人に薦めた本の中で、「分かりやすかった」という反応がいちばん
多かったのがこの本です。ACCESS VBAの内容も包括しているので、将来的にも役に立つでしょう。
概念の説明が中心で用例は乏しいので、メイン本にはできませんが、「かんたんプログラミング」を
持っているのであればそれで足りると思います。
「Excel VBAのプログラミングのツボとコツがゼッタイにわかる本〜最初からそう教えてくれればいいのに」(秀和システム)
「絵本」よりも実際性があり、個人的には一押しです。解説文と図の取り合わせがとても洗練されており、
文脈の多義性によるストレスや誤読を最小限に抑えようとする、手厚い推敲の跡が感じられます。新しい本なので
まだ他人に薦めたことはありませんが、アマゾンでは好評なようです。
「VBAポケットリファレンス」(技術評論社)
ヘルプがあればリファレンス本はいらない、という声もありますが、個人的には手離せません。
ページをめくるより、ヘルプを開いた方が速いような気もするかもしれませんが、
書式指定子の一覧、よく使うオブジェクトのプロパティ一覧など、よく開くページに
付箋を貼って机に置いておくだけで、パッと見たい時には最速のツールになり、ディスプレイも汚れないので
思考が中断されません。(※ただし、ヘルプを使って調べる習慣は、それはそれで必要です)
「逆引き」本(各社)
>276で既に上がっていますが、豊富な用例がほしい時は逆引き本です。ただ、「やりたいこと」をもとに
用例を探す場合、インターネット検索のほうがより楽な場合が結構あることも覚えておいてください。
「VBA + (やりたいことに関連するキーワード)」で検索すると、似たようなことを既にやっている人の
コードが割と簡単に見つかったりします。
301:y
08/09/19 21:24:04
他にも良書はたくさんあるので、上にこだわることはありませんが、ひとつだけ、初心者が解説書を選ぶ上で
ぜひ注意してほしい点は、VisualBasicEditorの使い方、特にデバッグの作法を丁寧に解説している章があるかどうかです。
ステップ実行、ローカルまたはウォッチウィンドウでの変数の監視、イミディエイトウィンドウからの介入、これらの意味を
早いうちに知り、使いこなせるかどうかが、その後の上達に明らかに影響します。
302:デフォルトの名無しさん
08/09/19 21:27:08
たいしたデバッガじゃないからヘルプで十分だよ
303:y
08/09/19 21:56:25
>>273
Excel2007なら、オートフィルタの抽出条件で「上位○位まで」という設定が可能になったので、
それを組み合わせれば、フィルタだけで何とかなるような気がします。
ただ関数だけでやるとなると… いい方法が思いつきません。
304:y
08/09/19 22:28:11
すみません。>>300の「>276で既に上がっていますが」は、「>277」の間違いです。
さらに内容も、結構>277とかぶってしまっています。失礼しました。
305:292
08/09/19 23:27:08
>>297
頭悪そうなレス
>>299
センスが良いネーミングをぜひとも教えてくれ
貶すことしか知らない無能って多いな
306:デフォルトの名無しさん
08/09/19 23:31:05
あらあらw
307:デフォルトの名無しさん
08/09/20 00:29:08
先週金曜日あたりから突然会社のExcel2002がおかしくなった。ネットワークが切断されたかなんたらで、ファイルにアクセスできないやらなんたらというのがおきるようになった。
コンパイルするとファイルサイズが600kbから740kbになる場合とならない場合があり、(ソースはバックアップから同じ様にに変更したのに)大きくなった場合、実行すると強制終了になるという症状も現れた。
自宅の2003では問題なかったがためしに2002に変更。SP3を適用したまでは問題なかったが会社と同じバージョンになるよう、全部の更新を適用したところ同じ症状となった
ためしに最新のKB8951551を削除するとあっさり解決した・・。同じ目にあってる人いますか?
解決にいたるまでめちゃくちゃ苦労したよ・・・。(いやまだ会社のエクセルでは試せてないけど・・・)
308:デフォルトの名無しさん
08/09/20 01:39:41
IDでないのにわざわざコテつけて煽るってなにこいつ
309:デフォルトの名無しさん
08/09/20 02:37:18
初心者です、お世話になります。
他の板で質問したあとに、こちらで質問すべきだったと気付きましたマルチポストですが勘弁してください。
セルA1とB1にそれぞれシリアル値による時間が入っています。
セルの書式設定により時間が表示されています。
ユーザーフォームの中のラベル1にB1からA1を引いた時間を時分秒の形で表示したいのです。
A1は開始時間、B1は終了時間、ラベル1は所用時間と考えてください。
Label1.Caption = Range("B1") - Range("A1").value
とやるとシリアル値っぽいのが出るのですが、時間を表示したいのです。
助けてくださいませ。
310:デフォルトの名無しさん
08/09/20 03:58:49
>>292
ホントありがと。
まったくプログラム経験なしだけど、
書いていただいたものをもとに
勉強含め動かしてみたいと思います。
感謝します。
311:デフォルトの名無しさん
08/09/20 08:40:23
>>309
DateDiff関数でintervalに"s"を指定して秒単位の差分を取得、
後はそこから時分秒に分割して文字列に結合して完成、って所?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4840日前に更新/261 KB
担当:undef