情報系の授業の課題なのですが、思ったようにできず困っています。エクセル(2010)のvbaでネットでの拾い物を使って改変して使用しているのですが、処理が通らず困っております。
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 "water", "leaf", "wind", "dragon"
Case Else
If (Left(sname, 3) = "Lightning" Or Left(sname, 3) = "fire") And InStr(sname, "伝説ポケモン") = 0 Then
sname = Left(sname, 3) & "aaa"
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
友人からここが原因で通らないんじゃないの?
If (Left(sname, 3) = "Lightning" Or Left(sname, 3) = "fire") And InStr(sname, "伝説ポケモン") = 0 Then
sname = Left(sname, 3) & "aaa"
Else
……と指摘を受けたのですが、どう直せばいいのかよくわかりません。
誰がわかる方いらっしゃいますでしょうか。
No.2ベストアンサー
- 回答日時:
If Left(sname, 3) = "Lig"
If Left(sname, 9) = "Lightning"
どちらでもTrueになりえます。
もちろんfireに関しても同じ配慮は必要ですし、、、
Lightning が大文字から始まっていてfireが小文字であることに問題があるかもしれませんし、、、
かぶっているものがなければ、左3文字判定でもよいと思います。
あと、、、
For i = 32 To 40
Select Case iでcase 1~case 9って、絶対にどれも引っ掛らないと思うけど、、、
何だろう、デバッグの方法で、ステップ実行とか、習っていないのかな?
自分が思う通りの動きをしているか見ながらやるとよいよ。
http://www.239-programing.com/excel-vba/basic/ba …
回答ありがとうございます。
あれから自分でもいじってみたのですがむずかしくなかなか期待通りにデータは返ってきませんでした。
ご指摘いただいた
For i = 32 To 40
Select Case iでcase 1~case 9の行に「0」として一応数値は返ってきています(^_^;)どうやら抽出とコピペのループがうまくいっていないようなのですがここだけでも解決できたのでよかったです、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで条件が一致する行のデータ...
-
Excel VBA インデックスの境...
-
エクセル:VBAで月変わりで、自...
-
Excel で行を指定回数だけコピ...
-
エクセルVBAで 2種のリストを...
-
シャープのアクオス sh-m25 を...
-
エクセルVBA 別シートの複数の...
-
【WORD差し込み印刷】複数レコ...
-
VBA:同じ文字列データの比...
-
VBA別シートの最終行の下行へ貼...
-
EXCELマクロで全シート対...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA 時刻でのD...
-
VBAで複雑な構成の転記
-
vbaでコントロールブレイク
-
エクセルVBAで実行時エラー...
-
Excel VBA :2回目以降実行で貼...
-
アクセスかエクセルで不一致行...
-
ソフトバンク 911SH 着...
-
代替機にキズ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
エクセル:VBAで月変わりで、自...
-
歯抜けの時間を埋めて行の挿入
-
エクセルVBAで SendKeys "{TAB}"
-
VBAで条件が一致する行のデータ...
-
VBA別シートの最終行の下行へ貼...
-
EXCELマクロで全シート対...
-
Excel VBAでシート内全体に非表...
-
VBA 貼付先範囲(行)がいっぱ...
-
VBAで複数シート選択
-
【VBA】UserForm1の中で使うワ...
-
【WORD差し込み印刷】複数レコ...
-
VBAで複雑な構成の転記
-
エクセルVBAでの日付順のデ...
おすすめ情報
返事ありがとうございます
(sname,3)の3は文字数だと思うので、まずは数値を3以上にすれば、いいのでしょうか
回答ありがとうございます。
恥ずかしながらVBAは今週から始まったばかりで、デバッグのステップどころか、VBAの仕組みや構文がまだまだよくわかっていない状態です。
ご指摘ありがとうございます。
For i = 32 To 40
Select Case iでcase 1~case 9の点に関しては直すことができました。
しかし、データが2つしか返ってこず、課題提出が今日なのでかなり焦ってはいるのですが、
1つしかデータが返ってこないです。画面をじ~っと見て試行錯誤しています。