1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/ ★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)
48 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 23:47:47 ] >>47 左から6文字「目」じゃない
49 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:42:48 ] >> それは半角の空白6文字かどうかの判定式。 全角6文字の空白かどうかなら If Left$(moziretu,6)=String$(6," ") then 混在だとちょっと面倒かな?
50 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 11:48:18 ] >>49 全角半角考慮してこんなのはどうかな? LTrim$(Left$(moziretu, 6)) = ""
51 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 13:07:48 ] >>50 なるほどね。 それが一番いいだろうな。
52 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:54:36 ] StrComp(Left$(moziretu,6),Space(6),vbTextCompare)
53 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:24:22 ] 空白文字も含めて全て全角にしています、って書いてあるし、 数も6個で固定なら>>46 で充分でしょ わざわざ余分な関数使う意味がわからない
54 名前:50 mailto:sage [2008/12/11(木) 18:16:07 ] >>53 >>45 を読めばその一言が信用できないことくらい分かるだろ? 49だけ読んでレスした漏れが言えた事じゃないがw
55 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:34:08 ] >>43 ありがとうございました。 バイト数を数える事で対応してみます。
56 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 03:22:22 ] VBAフォームに、VBのFlexGridのようなマス目の入ったものを 表示させてEXCELのシートとやりとりしたいのだが、 そういったコントロールってないの? 今使ってるのがEXCEL2000なんだが。。。
57 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 03:48:02 ] アホ発見
58 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:45:20 ] 会社でやってる作業を自動化したくてVBAに興味を持ったんですが、よい参考資料が見つかりません。 VBAのリファレンス本でお勧めを教えて頂ければ助かります。 環境はWin2kでExcel 2003です。Cとか弄ったことがあるのでまるっきり初心者ではないです。
59 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:56:02 ] 丸っきりの初心者ではないと言い張るのなら、参考資料など見つからなくても何とかするもんだ。
60 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 16:22:48 ] >>56 owc >>58 msdnのヘルプ
61 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:39:41 ] 本といわれてヘルプを紹介するアホはどうにかならんかね。
62 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:43:12 ] どうにもならんよ
63 名前:デフォルトの名無しさん [2008/12/13(土) 19:36:14 ] 大きな本屋に行って参考書探すくらいの努力したら?
64 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 20:57:44 ] 経験者なら本なんていらんだろ。 VBAくらい中学生でも使え紆余w
65 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:32:27 ] 折れは、このスレだったか昨年知った次の本を薦める。 「技術評論社 Excel VBA ポケットレファレンス」 成りは小さいが、他のどの本よりも役に立った。 今年、確か、2007対応の改訂版が出たと思うが2003等も使えるように整理してあるはず。
66 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:55:26 ] ヘルプを見るのは常識として 本なら俺も↑のポケットリファレンスだな。 あとはできる大事典VBAもいい 勉強中なら本のほうがやりやすい所あるし。
67 名前:58 mailto:sage [2008/12/14(日) 15:30:22 ] コメントくださった方、ありがとうございました。 >65,66で紹介して頂いたポケットリファレンスを購入してきました。 ちょっと手に取って調べられる本が欲しかったので、まさにぴったりです。
68 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 16:42:59 ] >ちょっと手に取って調べられる本が欲しかったので、まさにぴったりです。 だったらそれを先に書いておけよ。
69 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 17:19:15 ] それくらい読み取れよアホ
70 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 02:04:11 ] まあ解決したみたいだからいいじゃないか。
71 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 16:37:15 ] 2007は関数の追加や仕様の変更が色々あったおかげで説明が増えて少し読みにくくなったので、 もし2003で使うならブックオフあたりで古いやつを探すといいかも。
72 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 23:15:34 ] スレチでしょうか…?初心者です。質問させて下さい WindowsXP、Excel2000です マクロでゲーム作りに挑戦し、遊べる段階にまで出来上がったのですが… なぜだか遊んでいると、高確率で突然「画面更新」が止まってしまいます。 処理は続いているので、音も鳴りますし、Escボタンでコードの実行を中断すると、画面更新が再開され内容が反映されます。 その時「継続」を選ぶとゲームを続けられるのですが、しばらくするとまた止まってしまいます。 ループ中にScreenupdating = Trueを入れてみましたが、効果はありませんでした。 何が原因なのでしょうか?思い当たる節があれば教えて下さい。 因みに落ちゲーで、セルドット方式です。Sleep関数を多用しています。 長文失礼しました…
73 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 00:01:40 ] 仕様です。 おとなしくFlashの勉強するのが吉。
74 名前:72 mailto:sage [2008/12/16(火) 04:33:53 ] >>73 レスありがとうございます。 仕様ですか…Excelの描写速度が遅いことは知っています。 しかし、ゲームプログラマーの方々もいらっしゃいますし、自分に否があるように思えてなりません。 コードの書き方に問題がある、ということは考えられませんか?コードは現在700行程です。 自信はありませんが、Sleepが問題な気がします。どうでしょうか。
75 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 04:41:10 ] 「否」でなく「非」でした
76 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 06:08:43 ] だったらコードを晒したら? それができないなら自分で勝手に調べて答えを出せばいいよ。
77 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 10:00:26 ] データ型について質問です。 エクセルのセルに勤務時間が入っており、これをvbaで計算しているのですが 時間の時も日付型(DATE)の方が良いのでしょうか? それともSingleやDoubleでしょうか? VBAの勉強も兼ねてやってますので、関数でやれという回答はご容赦下さい・・
78 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 12:24:26 ] >>76 やっぱり、コード見ないとどうしようもないですよね… お騒がせしました
79 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 13:09:50 ] そりゃぁ、Sleepが問題だなんて認識している香具師とまともに会話が成立するとは思えないもんねぇ。
80 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 13:10:45 ] >>77 勉強を兼ねているんだろ。全部やれ。
81 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 13:15:49 ] >>80 試してみてどちらでもできるということは確認済みなんです でも一般的に、どちらがベターなのかなと思いまして
82 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 13:27:29 ] 一般的には、シート関数だな。
83 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 15:03:10 ] >>79 Sleep関数は問題無いんですね?ありがとうございます!安心しました Sleepが使えないとなると凄く面倒になるので… 以前に原因を調べていたところ、Sleep関数の欠点(?)を綴ったページを見つけ、 その内容を見て勝手にSleepが原因だと解釈してしまったみたいです。 自己解決出来るよう、もう少し頑張ってみます
84 名前:デフォルトの名無しさん [2008/12/16(火) 15:42:22 ] エクセルでVBAを使ってじゃんけんゲームを作れと言われたのですがわかりません 教えてください
85 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 15:50:10 ] 宿題丸投げはご遠慮ください。 VBAでなくてもできることの質問は、VBスレ辺りでどうぞ。
86 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:46:59 ] VBスレでも宿題はお断りだw
87 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 23:12:04 ] V=チョキ B=グー A=パー としてじゃんけんを楽しんでください。
88 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 07:58:32 ] 意地悪なやつらだな。 逆に考えろよ。VBAなんて宿題かゲームくらいにしか使わないだろ。 おまえらのご自慢のテクニックを披露できるチャンスだぞ。
89 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 09:42:52 ] と学生が申しております 仕事で使うわアホ
90 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:06:52 ] >>89 VBAがまともに使えない上に仕事したことないやつが若気の至りってやつで書き込んだんだろう あまり責めてやるなよw
91 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 12:55:10 ] >>89 >>90 どんなことに使ってるの?
92 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:49:36 ] ルーチンワークは大体そう 他は資料をデータベースっぽく正規化するために使うことも ・・まぁ、大企業ならこんなことしなくても既にシステムは完成されてるんだけどね
93 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:51:22 ] SAPのBWなんかはExcelマクロ
94 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:57:12 ] オフコンからデータ(CSVとか)受け取って 帳票(見積書とか)の形に整えて印刷とか
95 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 18:51:26 ] WindowsXP、Excel2002ユーザの質問です。 現在VBAマクロ内で、OSのXP/Vistaの違いを問わず、 インストールされているFirefox 3.0.xの 実行ファイルのフルパスを取得しようとしています。Firefox3が ・標準のフォルダ以外にインストールしている可能性がある ・HTML、HTTP等に関連付けられている ・デフォルトブラウザに指定されている という状態で使われているとき、マクロ上で何をすればスマートにフルパスが得られるでしょうか? 検索すると、既存ファイルを利用する方法、レジストリの関連付けを参照する方法がありますが、 他の方法は無いでしょうか? 参考になる情報をご存知の方、教えてください。
96 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:27:43 ] [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox. exe]
97 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 01:52:45 ] 問屋でデータ処理に未知のオフコン使ってて、送られてくる売り上げデータのフォーマットが変態的なんで VBAで整形&正規化してる。なんか>>94 とよく似た境遇だな。おまけに受け渡しはいまだにフロッピーディスク。 社内でデータベース処理してるマシンも松下製の見たことない機種だったなあ。 こっちはなんとPC-9821が専用ケーブルでつながってて、N88-BASICで書かれた端末ソフトが走ってる。 中小企業でコンピューターの知識がないと、メーカーの営業の言うがままにシステム構築して 記憶媒体から何から何まで汎用性ゼロのシステムで囲い込まれてにっちもさっちもいかないことが多い希ガス。
98 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 10:56:24 ] 何年前に作ったシステムだよ?
99 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 11:40:21 ] wikiによるとPC-9821が入ったのは早くても15年位前らしいな パソコンで動くエミュレーターがあるにもかかわらず いまだにバカ端が業務で現役ってところもあるしそんなに珍しくもないんじゃね? まぁスレ違いだしこの辺で流れ斬ろうか・・・
100 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 13:42:45 ] ダム端って言うんだよ
101 名前:sage mailto:sage [2008/12/18(木) 15:09:13 ] いまユーザーフォームを利用してモグラたたきを作っているのですが じかんをカウントダウンさせるプログラムとモグラの動きのプログラムが うまく作用せず、モグラの動きのプログラムが終了すると 再びカウントダウンするようになってしまいます。両方とも独立して動くように したいのですがよい方法はありませんか。
102 名前:sage mailto:sage [2008/12/18(木) 15:11:29 ] ソースです スタートボタンを押すと時間のカウントダウンを開始 Private Sub CommandButton1_Click() starttime1 = 2 starttime2 = 0 startflag = 1 'ゲーム開始用フラグ Do While starttime1 >= 0 keika = Timer + 1 Do While keika > Timer Loop starttime2 = starttime2 - 1 If starttime2 < 0 Then starttime2 = 59 starttime1 = starttime1 - 1 End If If starttime1 < 0 Then MsgBox "TIME UP!" '時間が過ぎたら Exit Do End If Label4 = starttime1 & ":" & starttime2 'ラベルに時間のカウントダウンを表示 DoEvents Loop End Sub
103 名前:sage mailto:sage [2008/12/18(木) 15:18:27 ] ソースの続き Private Sub back1_Click() back1はイメージオブジェクトです If startflag = 1 Then Call moguratataki End If End Sub コマンドボタンを押したら時間のカウントダウンとゲームの開始したいと 思っていますがそれもまだ分からないので調べ中です。 call命令で、もぐらたたきゲームが始まるような感じで作りたいと思っています。
104 名前:sage mailto:sage [2008/12/18(木) 15:22:58 ] ソースの続き2 Sub moguratataki() Randomize kyarass = 15 stsuu = Int((3 * Rnd) + 1) hozon(0) = stsuu hozon(1) = stsuu a = 0 Do While stsuu > 0 stkyara = Int((kyarass * Rnd) + 1) - 1 If krflag(stkyara) <> 1 Then trkyara(a) = stkyara krflag(stkyara) = 1 stsuu = stsuu - 1 a = a + 1 End If Loop
105 名前:sage mailto:sage [2008/12/18(木) 15:25:33 ] ソースの続き3 b = 0 Do While hozon(0) > 0 stbasyo = Int((25 * Rnd) + 1) If anaflag(stbasyo - 1) <> 1 Then If stbasyo < 16 Then anaflag(stbasyo - 1) = 1 yokoti = (stbasyo Mod 5) - 1 If stbasyo = 5 Or stbasyo = 10 Or stbasyo = 15 Then yokoti = 4 End If If stbasyo = 15 Then stbasyo = 14 End If tateti = Int(stbasyo / 5) anax(b) = xti1(yokoti) anay(b) = yti1(tateti) b = b + 1 hozon(0) = hozon(0) - 1
106 名前:sage mailto:sage [2008/12/18(木) 15:26:25 ] ソースの続き4 Else anaflag(stbasyo - 1) = 1 yokoti = (stbasyo Mod 5) - 1 If stbasyo = 20 Or stbasyo = 25 Then yokoti = 4 End If If stbasyo = 25 Then stbasyo = 24 End If tateti = Int((stbasyo - 15) / 5) anax(b) = xti2(yokoti) anay(b) = yti2(tateti) b = b + 1 hozon(0) = hozon(0) - 1 End If End If Loop
107 名前:sage mailto:sage [2008/12/18(木) 15:27:54 ] ソースの続き5 For i = 0 To hozon(1) Step 1 mogura(trkyara(i)).Move anax(i), anay(i) mogura(trkyara(i)).Visible = True Next i For i = 30 To 0 Step -3 For j = 0 To hozon(1) Step 1 mogura(trkyara(j)).Move anax(j), anay(j) + i Next j DoEvents ts = Timer + 0.1 Do Until ts < Timer Loop Next i DoEvents ts = Timer + 0.1 Do Until ts < Timer Loop For i = 0 To 30 Step 3 For j = 0 To hozon(1) Step 1 mogura(trkyara(j)).Move anax(j), anay(j) + i Next j DoEvents ts = Timer + 0.1 Do Until ts < Timer Loop Next i For i = 0 To hozon(1) Step 1 mogura(trkyara(i)).Visible = False Next i end sub
108 名前:sage mailto:sage [2008/12/18(木) 15:30:53 ] わかりにくく読みにくいコードだと思いますが(すいません)よい方法あれば 教えてください。
109 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:31:07 ] Application.Ontimeでゴリゴリやるか、時間計測用のActiveX EXEを作ってイベントドリブンにしろ。 っつってもわかんねーかな。
110 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:46:55 ] <<109 さん おはやい回答ありがとうございます。 Application.Ontimeを調べてみました。なんとなくできそうな気が しそうですのでこれでやってみようと思います。ありがとうございました!
111 名前:デフォルトの名無しさん [2008/12/18(木) 20:25:38 ] セルのある列全体ににプルダウンの選択式で○、×を選ぶとします。 それをif判定で、試してみたところうまく結果がでませんでした。 プルダウンの選択式だと、"○"として扱われないのでしょうか?
112 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:46:33 ] >>111 何のプロパティをチェックしてるの?
113 名前:デフォルトの名無しさん [2008/12/18(木) 20:48:17 ] >>112 cellsでとってvalueを参照しております。 イミディエイトで中身みたら、ちゃんと×や○になってたのに・・・
114 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:40:37 ] >>113 実際のif文は?
115 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:41:19 ] >>113 そもそも、プルダウンじゃなくすれば判定できるの?
116 名前:デフォルトの名無しさん [2008/12/18(木) 21:48:14 ] >>114 do until なんとか ="" with ほにゃらら if .cells(x, y).value = "○" then 処理 end if loop .valueにはいってる値を確認したところ、×とかちゃんとはいってました セル全体にプルダウンの選択がそれぞれ入ってるからループ文では聞かないのかな
117 名前:デフォルトの名無しさん [2008/12/18(木) 22:26:25 ] sheet1の2-24行、D列に○×のプルダウンがはいっています。 これでやるとエラーがでますifの行に x = 1 i = 2 y = 4 Do Until Cells(i, y).Value = "" If Cells(i, y).Value = "○" Then Sheets(2).colums(x).Delete x = x + 1 i = i + 1 End If Loop
118 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:36:44 ] i=i+1はEndIfとLoopの間だと思う。 sheets(2)の列x(初期値1)を削除した後のループで再び削除する時にはxがインクリメントされてるから初期状態の列番号でいう所の3列目が削除されると思うがそれで良いのか、ふと疑問に思った。 どちらもエラーの原因じゃないけど。 というか、俺には「○×のプルダウンが入ってます」の意味が理解できない。 すまんな。
119 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:46:18 ] あとcolums→columns、だね それでもif文の行にはエラーは出ない。 力になれなくてすまんな。
120 名前:デフォルトの名無しさん [2008/12/18(木) 22:48:29 ] そうでした^^; たしかにインクリメントしないといけませんね Dim i As Integer Dim y As Integer Dim x As Integer x = 1 i = 2 y = 4 Do Until Cells(i, y).Value = "" If Cells(i, y).Value = "○" Then Sheets(2).colums(x).Delete x = x - 1 End If i = i + 1 x = x + 1 Loop End Sub これでやったらif文にオブジェクトはプロパティかメソッドをサポートしてない ってでてまたエラーになってしまいました
121 名前:デフォルトの名無しさん [2008/12/18(木) 22:53:48 ] ありがとうございます! columnsがまちがっていたようでした 無事いけました ご指摘いただいたcolumnsが間違っていたことが一番の原因だったようです
122 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:16:55 ] 失礼します シート1から実行するとしてセルB2には名前という文字が入っております const mojicell as string "B2" のようにしてシートの対応するセルに格納されてる値をとりだすことはできますか? やってみたところ、セルを格納するのはできなかったので・・・何か方法があるのかと思いまして 実際どのように試し方といいますと Sheets(mojicell).cells(...... のように使いました。 SHeets("名前").cells(... に置き換えられるかとおもっていたのですが、 実際はSheets("B2")と 入っておりました。 const で指定したセルが参照する値を格納することはできないのでしょうか?
123 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:19:36 ] セル参照だけならrangeオブジェクト使いなさい。 シートまで含むならまずconstの値を工夫しなさい。
124 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:21:20 ] >>122 const mojicell as string = "B2" worksheets(range(mojicell).value).cells(...
125 名前:デフォルトの名無しさん [2008/12/18(木) 23:50:23 ] >>124 これだと シート1からこのマクロ実行してシート1にあるセルを参照するならわかりやすいですが シート2からこのマクロを実行してシート1にあるセルを参照するとなると、 できなくなるのでは?
126 名前:デフォルトの名無しさん [2008/12/19(金) 00:50:28 ] >>124 これだとエラーでます・・・
127 名前:デフォルトの名無しさん [2008/12/19(金) 00:59:34 ] A17にテストという文字をセットしておくとします Sub tes2() Const moji As String = "A17" Sheets("テスト").Cells(3, 1).Value Sheets(Range(moji).Value).Cells(3, 1).Value これだと下の文がインデックスが有効範囲にないとエラーでます
128 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 01:03:33 ] >>127 "A17"は、シート名じゃねーだろ
129 名前:デフォルトの名無しさん [2008/12/19(金) 01:06:10 ] >>128 これの意味するところは range("A17").value = テスト という所なのでは? よって sheets("テスト") と>>124 さんがおっしゃってた意味かとおもってたのですが 動作がうまくいかないということは違いますよねorz
130 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 01:16:52 ] >>129 どのシートの"A17"で どこのマクロだよ
131 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 01:18:18 ] >>129 右辺を書け!
132 名前:デフォルトの名無しさん [2008/12/19(金) 01:23:35 ] sheets(1)にあるマクロでsheets(1)のA17セルには、テスト という値が入っております で、このsheets(1)のA17セルの値をconstとして間接的に参照できる形にして sheets("テスト")の3行1列目のセルの値を取得します でも、なぜか print Range(moji).value テスト とは表示されるのに、先ほどの下の文では表示されません
133 名前:デフォルトの名無しさん [2008/12/19(金) 01:26:27 ] Sheets(Range(moji).Value).Cells(3, 1).Value これではインデックス範囲のエラーがでますorz
134 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 01:35:00 ] 実際のファイルを作って、アップしろ
135 名前:デフォルトの名無しさん [2008/12/19(金) 01:42:37 ] Sub tes2() Const moji As String = "A17" Sheets("Range(moji).Value").Cells(3, 1).Value End Sub sheets(1)のA17セルには、テスト という値が格納されている sheets("テスト")のセル(3行1列目)の値には、たとえば 100 といった値が格納されている このマクロをsheet("テスト")にて実行する方法ということです 今のままじゃエラーがでますので
136 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 01:46:07 ] >>135 実際に作ったものをアップしろって
137 名前:デフォルトの名無しさん [2008/12/19(金) 02:16:52 ] まったくわからない・・・
138 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:19:01 ] うpされたものを拾う気はあるのかや?俺には無いよ。めんどくさい。 質問の意味不明度が増してきたのでそろそろ寝てほしいと思う。適当に脳内補完してみたから。 const moji as string = "A17" debug.print worksheets(sheet(1).range(moji)).cells(3,1)
139 名前:デフォルトの名無しさん [2008/12/19(金) 02:22:16 ] >>138 それを実行してみたところ型が一致していません。とでました。
140 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:23:02 ] >>138 >>135 >Sheets("Range(moji).Value").Cells(3, 1).Value この辺の行の意味不明度からして、根本的な間違いがあると思う。
141 名前:デフォルトの名無しさん [2008/12/19(金) 02:24:54 ] シートの名前は 1がSheet1 2がテスト です。 Sheet1のA17セルには、テスト と書かれています。他のすべてのセルは空白です。 テストのcells(3,1)の場所には適当に文字を書き込んでいます。 で、お教え頂いたマクロを実行したところ>>139 のエラーがでました。 const moji as string = "A17" debug.print worksheets(sheets(1).range(moji)).cells(3,1)
142 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:26:16 ] >>141 だから、実際のものをアップしないと話にならねーって
143 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:35:29 ] >>138 デバッグどころかコンパイルも通らない物貼り付けて、えらそうに・・・
144 名前:デフォルトの名無しさん [2008/12/19(金) 02:37:35 ] うーむ、簡単に見えてむずかしいようですね・・・
145 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:41:18 ] >>144 オマエが単純に間違ってんだよ。 現物をアップしろよ
146 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:43:48 ] ごめんよ、テストなんてしてなかったからさ。 だいぶゴツクなっちゃったけど、それでもよければどうぞ。 Sub test() Const moji As String = "A17" Dim sh As Worksheet Dim obj For Each obj In ThisWorkbook.Worksheets If obj.Name = Worksheets(1).Range(moji) Then Set sh = obj Exit For End If Next obj If IsObject(sh) And (Not sh Is Nothing) Then MsgBox sh.Cells(3, 1) End If End Sub
147 名前:デフォルトの名無しさん [2008/12/19(金) 02:44:20 ] sheet1のA1セルに テスト と入力します sheet2のシート名を手動でテストという名前に変更します sheet2のA1セルに 値 と入植します このブックをつくって マクロを sub テスト() const moji as string = "A1" debug.print worksheets(sheets(1).range(moji)).cells(1,1) end sub これでエラーがでてしまうということです。下から2行目のところにエラーが・・・
148 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:45:00 ] >>147 それはもういいんだよ。 現物上げろよバカ