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)
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 それはもういいんだよ。 現物上げろよバカ
149 名前:デフォルトの名無しさん [2008/12/19(金) 02:45:47 ] >>146 さすがにこれは長いですね・・・
150 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:46:35 ] >>148 現物をあげてダウンロードするまでにかかる時間のほうが長いと思うのですが・・・・
151 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:47:40 ] >>150 こんだけバカなんだから、根本的なところで間違ってんだよ。 どのセルに何の値を入れてるのかさえ、あてにならない。
152 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 02:48:58 ] >>150 概ね>>135 通りのコードを書き込んで、コンパイルもしてないだろうさ
153 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:05:44 ] もっとスマートに出来ないものかとぐぐったけどINDIRECTばっかでてくる…orz VBAでの良策ってどんなだろう。 >>149 長いのが気になるだけなら別関数にしてね^^
154 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:06:30 ] でもこれじゃconstでセルを指定しずらいというか面倒なのって痛いですね
155 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:10:01 ] >>154 オマエがバカなだけ。 Debug.Printもついてない行でエラーになるのはあたりまえ。
156 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:11:19 ] >>155 先ほどdebug.printがかかれてたマクロを実行してもエラーがでたのですが・・・
157 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:13:36 ] ごめん。それは俺のミス。 以上で終了───
158 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:13:43 ] >>156 rangeのデフォルトはValueじゃない。 それとDebug.Printが付いてないやつとは別のコード。 その区別がつかないのは、バカだから。
159 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 03:31:01 ] おぉ。rangeってrangeなのね。そうなのね。 そおしたら随分と無駄なコード書いてきたんだなぁ今まで。反省orz
160 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 07:04:25 ] rangeが指定する値を保存する方法って?
161 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 07:10:54 ] オブジェクト変数にrangeをセット
162 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 13:17:19 ] >>147 質問するとき小文字でコードアップするんじゃねーよ。 実際にVBEからコピペしろ。 回答者でも長いコードをオール小文字とかオール大文字は嫌味なくらいだ。 Sub テスト( ) Const moji As String = "A1" Debug.Print Worksheets(Worksheets("Sheet1").Range(moji).Value).Cells(1,1).Vallue End Sub と.Valueが抜けてるから型が一致しないとなるんだよ。 最後の.Valueはなくても動くが途中のは必須。 >>158 が書いてるのはこういうこと。
163 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 13:22:11 ] >>162 その発言、なんかのギャグ?
164 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 13:25:02 ] >>162 流れから見てその件はもう終わったものかと思っていたが・・・ 勘違いかな?
165 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 14:00:42 ] 日本人はひとつのジョークで3回笑う 1回目はジョークを聞いたとき 2回目はジョークの意味を教えてもらったとき 3回目は家に帰った後、やっとジョークの意味がわかったとき
166 名前:デフォルトの名無しさん [2008/12/19(金) 14:09:44 ] excel2002 SP3を使っています。 以下のようなへたくそなマクロを作りました。 ------------------------ここから------------------------ Private Sub Macro1() Worksheets("IV").Range("B2:B96").Select Selection.Copy Worksheets("IV").Range("C2").Select Selection.Insert Shift:=xlToRight Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Worksheets("IV").Columns("C:C").Select Worksheets("IV").Application.CutCopyMode = False nextTime = Now() + TimeValue("00:01:00") Application.OnTime nextTime, "Macro1" End Sub ------------------------ここまで------------------------ "IV"のシートを表示させているときは問題なく動作するのですが、 他のシートを表示させると以下のエラーとなって動作してくれません。 実行エラー"1004"RangeクラスのSelectメソッドが失敗しました。 何がいけないのか教えていただけますでしょうか。お願いします。
167 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 14:13:32 ] >>166 アクティブにしないとセレクトできないんじゃないの?
168 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 14:24:07 ] >>167 そうなんですか。困ったな。。。 普段は他のシートを表示させているので、 非アクティブでも動作をさせるにはどうしたらいいですか?
169 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 14:40:39 ] Worksheets("IV").Range("B2:B96").Copy Worksheets("IV").Range("C2").Insert Shift:=xlToRight Worksheets("IV").Range("C2").PasteSpecial ... Application.CutCopyMode = False
170 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 14:51:43 ] >>169 おおおおおお!!!!!! ありがとおおおおお!!!! さっそくやってみます。
171 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 14:56:51 ] >>169 できたああああ! ありがとう!!!! 感謝感謝!!!!
172 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:04:42 ] 質問させてください。 指定した範囲内にあるデータの種類の数を取得するにはどうしたらいいでしょうか? 汚いながらもVBAで配列に入れながら総当りで調べることはできるのですが ワークシート関数でそのようなものがあれば高速なのでそちらを使いたいと思っています。 例:範囲 A1:C3 A B C 1 山 川 海 2 海 海 川 3 川 都 南 この場合、「山、川、海、都、南」の5種類が出現するので 5を返してくれる関数を知りたいです。 よろしくお願いします。
173 名前:デフォルトの名無しさん [2008/12/19(金) 20:14:52 ] このファイルで別シートからマクロを実行して 特定の列だけ抽出して別のシートに表示したいです。 列を抽出するとき、たとえばA列とC列とE列を削除して表示させたい結果が 下のテーブルです。 このように別のシートからマクロを実行して他の別シートに抽出した結果を表示させるには どのようしすればいいでしょうか? 単にセル結合を考えない抽出ならできるのですが、 セル結合も考慮して、元の分類タイトルがあるまま抽出するにはどういった 手順でやるのが最適でしょうか?よろしくお願いしますm(__)m ファイルは以下のやつをみていただければわかりやすいかとおもいます www.dotup.org/uploda/www.dotup.org5812.xlsx.html
174 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 22:38:02 ] 101で質問したものです。 もぐらたたきが大まかですがだいたいできたので UPします ttp://www.mediafire.com/?bj352f2jaxz ttp://www.mediafire.com/?mn94db0mc4j まだもんだいはありますがよろしければ批評してください
175 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 23:33:05 ] >172 配列数式でも良ければ {=SUM(1/COUNTIF(A1:C3,A1:C3))}
176 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 00:54:59 ] >>172 配列の使い方はどうしてる? for eachで選択範囲をコレクションとして、 .valueが配列に含まれていなかった場合には、配列にぶち込んで、 最後にuboundでカウントすれば高速だと思うんだが。 このロジカルなら一瞬だと思うけど。 配列で総当たりってのがちと気になった。
177 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 01:05:35 ] >>173 シート名を明示してやればOKだね。 タイトル行が空白だったら、空白じゃなくなるまで左に移動してタイトルを取得する。 これを組むのが面倒なら、 結合を全部解除して、全てのセルにタイトルを振ってしまう。 最後に、重複するタイトルの場合に削除なりmergeなりで処理すれば良いと思う。 削除って考えじゃなくて、抽出したい物を残すって考えにしないとタイトルは取得出来ないな。
178 名前:デフォルトの名無しさん [2008/12/20(土) 08:34:25 ] >タイトル行が空白だったら、空白じゃなくなるまで左に移動してタイトルを取得する。 抽出してしまった場合、左にもうタイトルはないのではないでしょうか? あらかじめこれも全ての結合を解除したという前提かな? でも左に移動してタイトルを取得する場合、元からタイトルがない行があった場合 たとえば、メーカーというタイトルが最初からなかったとすると、本来なくていいタイトルに 別のタイトルが埋め込まれますよね? このファイルに対してはいけそうですが、ない場合は大変かな? >結合を全部解除して、全てのセルにタイトルを振ってしまう。 >最後に、重複するタイトルの場合に削除なりmergeなりで処理すれば良いと思う。 これもタイトルがない行があった場合、処理に困るかな・・・ 追加、条件で大変申し訳ないですが、もしタイトルが空白のセルがあった場合はこれじゃ難しいでしょうか?
179 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 12:23:58 ] すみません。CLASSモジュールの書き方がわからないんですが どこかに説明しているサイトないですか?
180 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 12:29:58 ] >>178 元からタイトルが無い列があるなんて知らないし。 てか、excelでレイアウトするなら、VBAで処理しようと考えない事だな。 人間が見やすい見た目と、計算機が処理しやすい(出来る)のは全く違うからね。 帳票として見やすく加工・レイアウトするのは、全ての演算処理が終わってから最後にやるもの。 レイアウトされたものに処理を掛ける事ほど無意味かつ煩雑になる事はないぞよ。 いったん全部のmarge解除して、全てのタイトルをはめ込むしかないでしょ。
181 名前:デフォルトの名無しさん [2008/12/20(土) 19:32:18 ] Excel2003を使ってます。 VBAの勉強をしたいのですが、良い本や教材はありますでしょうか? バカでもわかるようなのでいいです。
182 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 22:48:34 ] VBAで何やりたいの?
183 名前:デフォルトの名無しさん [2008/12/21(日) 00:50:07 ] 質問です。 アクティブになっているシートから別のシートを選択したいのですが、 エラーが出てとまってしまいますが、なぜでしょうか? エラーの内容はシートの保護がかかっている状態で、 そのシートを選択したとき(Activate)と同じエラーです。 エクセル2003で、自宅PCでは動作しますが、会社PC(2003だと思う)ではダメです。 もちろん保護ははずしましています。 考えられる原因はなにがあるでしょうか。 文章がわかりにくかったらすいません。