[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 12/27 15:50 / Filesize : 259 KB / Number-of Response : 921
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part9



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)


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
それはもういいんだよ。
現物上げろよバカ

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を返してくれる関数を知りたいです。

よろしくお願いします。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<259KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef