dポイントプレゼントキャンペーン実施中!

こんにちは

添付した画像のように、
マクロを作りたいのですが、
C列に4桁数字以外の文字が入っている場合に、それを無視し、4桁数字が入っている場合に、D列に貼り付けをしたいのです。
関数では、IFとLEN(C2)=4 を使用するのではないかと思われますが、
VBAでどうやって実現できますでしょう?

ご教示お願い致します。

「[VBA]VBAでIF関数を作成したい」の質問画像

A 回答 (5件)

こんばんは!



関数で出来そうですが、VBAをご希望だというコトなので・・・
一例です。

Sub Sample1()
 Dim i As Long
  For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row
   With Cells(i, "C")
    If IsNumeric(.Value) And .Value > 999 Then
     Cells(i, "D") = .Value
    Else
     Cells(i, "D").ClearContents
    End If
   End With
  Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
NO.5様と違うコードですが、いずれにしても実現できました。
IF,LEN,VLOOKUP関数で出来ますが、VBAのほうはどんな感じなのかを知りたかったんです。
参考になりました。

お礼日時:2020/02/06 10:06

こんにちは



エクセルの関数機能を利用した別案です。

※ 文章からだけだと限定条件がいろいろと考えられるので、ひとまず以下にしてあります。
『C列の値が整数の数値(数字の文字列は除く)で10000~9999までの場合に採用』

Sub Sample()
With Cells(2, 4).Resize(WorksheetFunction.Max(Cells(Rows.Count, 3).End(xlUp).Row - 1, 1))
.FormulaLocal = "=IF(ISNUMBER(C2)*(LEN(C2)=4)*(LEN(TEXT(C2,""0""))=4),C2,"""")"
.Value = .Value
End With
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実現できました。
IF,LEN,VLOOKUP関数で出来ますが、VBAのほうはどんな感じなのかを知りたかったんです。
勉強になりました。

お礼日時:2020/02/06 10:04

☆「1000」~「9999」が対象の場合


Sub Sample①()
 Dim 行 As Long
 Dim 値 As String
 Dim 対象 As Boolean
 Columns("C:C").Columns.AutoFit
 For 行 = 2 To Cells(Rows.Count, 2).End(xlUp).Row
  対象 = False
  値 = Cells(行, 3).Text
  If Len(値) = 4 Then
   If IsNumeric(値) Then
    If 値 >= 1000 Then
     If 値 <= 9999 Then
      対象 = True
     End If
    End If
   End If
  End If
  If 対象 Then
   Cells(行, 4).Value = Cells(行, 3).Value
  Else
   Cells(行, 4).ClearContents
  End If
 Next
End Sub

☆「0000」~「9999」の文字列も対象にする場合
Sub Sample②()
 Dim 行 As Long
 Dim 値 As String
 Dim 対象 As Boolean
 Columns("C:C").Columns.AutoFit
 For 行 = 2 To Cells(Rows.Count, 2).End(xlUp).Row
  対象 = False
  値 = Cells(行, 3).Text
  If Len(値) = 4 Then
   If IsNumeric(値) Then
    If 値 <= 9999 Then
     If Int(値) = 値 Then
      対象 = True
     End If
    End If
   End If
  End If
  If 対象 Then
   Cells(行, 4).Value = Format(Cells(行, 3).Value, "0000")
   Cells(行, 4).NumberFormatLocal = "0000"
  Else
   Cells(行, 4).ClearContents
  End If
 Next
End Sub

☆ 文字の物は対象外にする場合。
Sub Sample③()
 Dim 行 As Long
 Dim 値 As String
 Dim 対象 As Boolean
 Columns("C:C").Columns.AutoFit
 For 行 = 2 To Cells(Rows.Count, 2).End(xlUp).Row
  対象 = False
  If VarType(Cells(行, 3).Value) <> vbString Then
   値 = Cells(行, 3).Text
   If Len(値) = 4 Then
    If IsNumeric(値) Then
     If 値 <= 9999 Then
      If Int(値) = 値 Then
       対象 = True
      End If
     End If
    End If
   End If
  End If
  If 対象 Then
   Cells(行, 4).Value = Format(Cells(行, 3).Value, "0000")
   Cells(行, 4).NumberFormatLocal = "0000"
  Else
   Cells(行, 4).ClearContents
  End If
 Next
End sub

※ もし期待に沿った結果ではなかった時は下図の場合どういう表示になれば良いかを提示して下さい。
「[VBA]VBAでIF関数を作成したい」の回答画像4
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
マクロは動作できています。
参考になりました。

お礼日時:2020/02/10 14:52

No.1 に対する答えが無いと No.2 のような答えが返ります。


それで良いならば構いませんが、的確な回答を望むならば早めに回答ください。

No.2 の場合
「999.9」「1000.5」「9999.9」の数字や「1000」「9999」のような文字も対象になります。
「0000」や「0999」のような文字列は対象外になってしまいます。
    • good
    • 0

図ですと、C列は文字列ではなく数字になっていますが「0123」のような物はどうなんでしょうか?次の内から選んでください。


①「1000」~「9999」が対象なので考えないで良い
②「0000」~「9999」の文字列も対象にする
③ 文字の物は対象外にする。
④ その他(具体的に説明して下さい)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!