Excel2010のVBAに詳しい方、至急です。
前回も同様の質問をして、回答していただいた方のアドバイスをもとに自分でも改善?してみたつもりなのですが無理だったので再度質問させていただきます。
ポケモン図鑑という表をタイプごとにリストを抽出して、
そのデータをA列に数値が入っている行から最後の行までをコピーして、
抽出した際の条件と同じ名前のシートに所定の場所に貼り付け、最後に貼り付け先のシートのとある箇所をコピーして、ポケモン図鑑というシートにデータをペーストするというマクロなんですが、実際に通しても数値が0となってしまいます。
メッセージボックスで入力した後、「終了しました」と出るのですが期待通りに抽出してコピー&ペーストができていないようで困っています。
だれかたすけていただけませんか。
※抽出する項目
lightening※1
fire※2
water
leaf
wind
dragon
※1抽出する際、テキストフィルターのユーザー設定で
「lightening」からはじまる「伝説・幻」を含まないという条件で抽出しなければならない。
※2抽出する際、テキストフィルターのユーザー設定で
「fire」からはじまる「伝説・幻」を含まないという条件で抽出しなければならない。
Sub Pokemon()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim hizuke As String, wnum As String
Dim rng As Range
Dim i As Long, imax As Long
Dim j As Variant, c As Long
Dim sname As String
Dim fsh As Variant
fsh = Array("lightening", "fire", "water", "leaf", "wind", "dragon")
hizuke = InputBox("ポケモンを捕まえた日付を入力して下さい")
If hizuke = "" Then Exit Sub
If IsDate(hizuke) = False Then
MsgBox "日付不正"
Exit Sub
End If
Set sh1 = Worksheets("ポケモン図鑑")
With sh1
Set rng = .Range(.Cells(4, 5), .Cells(4, .Cells(4, Columns.Count).End(xlToLeft).Column))
End With
j = Application.Match(CLng(CDate(hizuke)), rng, 0)
If IsError(j) Then
MsgBox "該当日付がありません"
Exit Sub
End If
wnum = InputBox("選択した日付が何週目になるかを入力して下さい")
If wnum = "" Then Exit Sub
If wnum < 1 Or wnum > 5 Then
MsgBox "週不正"
Exit Sub
End If
Application.ScreenUpdating = False
c = wnum * 2 + 3
For Each sh2 In Worksheets
For i = 0 To 5
If sh2.Name = fsh(i) Then
With sh2
If .Cells(5, c) <> "" Then
.Range(.Cells(5, c), .Cells(.Cells(Rows.Count, c).End(xlUp).Row, c)).ClearContents
End If
End With
Exit For
End If
Next i
Next sh2
With sh2
If .Cells(5, c) <> "" Then
.Range(.Cells(5, c), .Cells(.Cells(Rows.Count, c).End(xlUp).Row, c)).ClearContents
End If
End With
End If
Next sh2
With sh1
imax = .Cells(Rows.Count, "A").End(xlUp).Row
For i = 6 To imax
If .Range("A" & i).Value <> "" Then
sname = .Range("D" & i).Value
Select Case sname
Case "lightening","fire","water", "leaf", "wind", "dragon"
Case Else
sname = ""
End If
End Select
If sname <> "" Then
Set sh2 = Worksheets(sname)
sh2.Cells(sh2.Cells(Rows.Count, c).End(xlUp).Row + 1, c).Value = .Cells(i, j + 4)
End If
End If
Next i
For i = 32 To 40
Set sh2 = Nothing
Select Case i
Case 1
Set sh2 = Worksheets("lightening")
Case 2
Set sh2 = Worksheets("fire")
Case 4
Set sh2 = Worksheets("water")
Case 6
Set sh2 = Worksheets("leaf")
Case 7
Set sh2 = Worksheets("wind")
Case 9
Set sh2 = Worksheets("dogagon")
End Select
If Not sh2 Is Nothing Then
.Cells(i, j + 4).Value = sh2.Cells(sh2.Cells(Rows.Count, c + 1).End(xlUp).Row, c + 1).Value
End If
Next i
End With
Application.ScreenUpdating = True
MsgBox "ポケモン抽出コピペ終わり!"
End Sub
No.2ベストアンサー
- 回答日時:
プログラム自体の動きは全くチェックしていません。
色々おかしいところがありますが 自分でデバッグくらいできるように
ならないとダメだと思います。
42行目と 50行目の「End If」はどこに掛かっていますか?
51行目の Next sh2はどこに掛かっていますか?
最後の方の「dogagon」てつづりは合ってますか?
61行目の「End If」と 62行目の「End Select」の順番は合ってますか?
67行目の「End If」はどこと以下同文
初心者レベルでいいので VBAについての勉強を先にすべきだと思います。
No.3
- 回答日時:
直せなくはないですけど……
htmlの知識があるなら分かると思いますが タグは必ずネストしてい
かないといけませんよね。
For ~ Next
If ~ End if
With ~ End With
これらも同じです。位置を見直していって下さい。
正直なところ このプログラムを添削したところで 作りの悪さは残り
ます。どうもやりながら作っていったのかもしれませんが 最初の方
と最後の方でやり方も変わってしまっているように見えます。
面倒と思うかもしれませんが 調べて分かったことを前提にして最初
からやり直した方がいいものになると思いますよ。
No.1
- 回答日時:
良くは見ていませんが、最後の「For~Next」分の中の「Select Case」は「i」が32~40なので一度も該当しません。
もしかしたら「For i = 32 To 40」ではなく「For j = 32 To 40」なのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA インデックスの境...
-
エクセル:VBAで月変わりで、自...
-
excelの差込印刷で可視セルだけ...
-
VBAで条件が一致する行のデータ...
-
エクセルVBAで SendKeys "{TAB}"
-
VBA 貼付先範囲(行)がいっぱ...
-
Excel で行を指定回数だけコピ...
-
EXCELマクロで全シート対...
-
エクセルVBA 別シートの複数の...
-
Excelでデータの抽出&別シート...
-
歯抜けの時間を埋めて行の挿入
-
VBA別シートの最終行の下行へ貼...
-
VBA 最終行取得からの繰り返し貼付
-
エクセルVBAでの日付順のデ...
-
Excel VBAでシート内全体に非表...
-
エクセル シート保護後コメン...
-
VBAで複数シート選択
-
代替機にキズ
-
スマホ機種変更で旧機種のGoogl...
-
ケータイの電源がいきなり落ち...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
エクセル:VBAで月変わりで、自...
-
VBA別シートの最終行の下行へ貼...
-
VBA:同じ文字列データの比...
-
エクセルVBAで SendKeys "{TAB}"
-
エクセルVBAで 2種のリストを...
-
エクセルVBA 別シートの複数の...
-
Excel VBA 複数条件にマッチし...
-
Excelマクロで空白セルを詰めて...
-
VBA 貼付先範囲(行)がいっぱ...
-
歯抜けの時間を埋めて行の挿入
-
VBAで 任意図形のみ残してその...
-
VBA 最終行取得からの繰り返し貼付
-
VBAで複数シート選択
-
Excelマクロ データが上書きさ...
-
エクセル2007で、マクロで、結...
-
【WORD差し込み印刷】複数レコ...
-
VBAで条件が一致する行のデータ...
おすすめ情報
ご指摘ありがとうございます。
早速直してまた実行してみましたが、最後のポケモン図鑑への貼り付けはされるのですが、ポケモン図鑑から他のシートへの抽出コピペがうまくいきませんでした。もうなんでなのかわからず迷走しております。
>初心者レベルでいいので VBAについての勉強を先にすべきだと思います。
うぐ、厳しい意見ありがとうございます。
学校でhtmlやcssの勉強はしてまいりましたが、この課題に関しては普通のExcelの基礎講義の番外編といった感じに出されまして・・・まったく基礎が確かになってないですよね。正直見方や構文を調べてもいまいちピンと来ない状況で、ひとまずdragonに関しては修正できたのですが。
アドバイスいただいた61行目の「End If」と 62行目の「End Select」の順番や67行目の「End If」はどこと以下同文・・・のあたりに関しては情けないことに全く理解できません。
d-q-t-pさんへ
アドバイスありがとうございます。
でも、提出期限が今日の午後14時なのでとても自分の力量では組みなおすのが難しいです。