• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字のチェック)

文字のチェックプログラム作成方法について

このQ&Aのポイント
  • ExcelのVBAを使用して、指定の条件に基づいてセルの値を確認し、別のシートに値を出力するプログラムを作成したいです。
  • 条件は、シート2のA列には1または2または5が入っており、B列の2文字目以降の3文字分が'098または'099である場合です。
  • プログラムを作成しましたが、if文の型が違うというエラーが出たり、正常に動作しなかったりします。ご指摘いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。""で囲むところがもう一つありました。 で、結局、 Sub macro1() Dim i As Long For i = 1 To 5 If CStr(Mid(Sheets("Sheet2").Cells(i, 2), 2, 3)) = "098" Or CStr(Mid(Sheets("Sheet2").Cells(i, 2), 2, 3)) = "099" And Sheets("Sheet2").Cells(i, 1) = 1 Then Sheets("Sheet2").Cells(i, 3).Value = 0 End If Next End Sub 最初の条件の内容はスルーしていましたが、 If CStr(Mid(Sheets("Sheet2").Cells(i, 2), 2, 3)) = "098" And Sheets("Sheet2").Cells(i, 1) = 1 Then Sheets("Sheet2").Cells(i, 3).Value = 0 ElseIf CStr(Mid(Sheets("Sheet2").Cells(i, 2), 2, 3)) = "099" And Sheets("Sheet2").Cells(i, 1) = 1 Then Sheets("Sheet2").Cells(i, 3).Value = 0 End If でもなりたちますか? また、Sheet3に書き出すなら、 Sheets("Sheet2").Cells(i, 3).Value = 0 は、 Sheets("Sheet3").Cells(i, 3).Value = 0 ですが、これは多分Sheet2のままなのでしょうね。

y6411y
質問者

お礼

試してみます。 ありがとうございます。 とても丁寧で分かりやすくて感謝です。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

以下のような感じですが。 "'098"にいらないものがくっついている シート名は""で囲む。 "098"は文字列なのでCStrで変換 Sub macro1() Dim i As Long For i = 1 To 5 If CStr(Mid(Sheets("Sheet2").Cells(i, 2), 2, 3)) = "098" Or CStr(Mid(Sheets("Sheet2").Cells(i, 2), 2, 3)) = "099" And Sheets("Sheet2").Cells(i, 1) = 1 Then Sheets(Sheet2).Cells(i, 3).Value = 0 End If Next End Sub

すると、全ての回答が全文表示されます。
回答No.1

>エラーがなくても表示されない ということは少なからず実行できていたってことだろうけど、 実行できたことが信じられないほど変なことになってます。 思った通りの表示にならなくて色々いじっているうちにこんなのに なっちゃったのかな~。 1."'099" のように比較文字列の中にアポストロフィはいらない。  'はワークシート上で0で始まる数値を正しく表示させる方便みたいなもので、  実際の値には入らない。  str1 = Sheets("Sheet2").Cells(i,2)  の文を追加などして、プログラム実行時にローカルウィンドウで確認して下さい。 2.ワークシートを指定するやり方がおかしい。  a. Sheets(1).Cells(i,2)のようにインデックスを数字で指定するか、  b. Sheets("Sheet2").Cells(i,2)のように名前を文字列で指定するか、  c. Sheet2.Cells(i,2)のようにオブジェクト名を直接指定するしかない。  質問者のやり方は上記のb. と c.を混同しているように見える。  オブジェクト名については、ワークシートをプロパティウィンドウに表示させて  見るとわかります。 3.Or と And の使い方がおかしい。  If x Or y And z と書いた時には、xが真の時か、yとzの両方が真の時にThen  以降を実行するという意味になり、質問者の言うxかyが真で、かつzが真の時  に実行という意図に反する動きになります。  (x Or y) And z と括弧をつければ、意図通りの結果になるはず。 4.結果をSheet2のC列に出力しようとしているように見えますが、  これは意図に反しませんか? こんな説明でわかるかな~。 以上

y6411y
質問者

補足

分かりやすい説明ありがとうございます。質問なのですが、4の意図に反するとはどういう意味ですか?

すると、全ての回答が全文表示されます。

関連するQ&A