• ベストアンサー

エクセルVBAでIF関数

また、質問させていただきます。下のコードは見よう見真似で作りましたが、問題が出まして、質問に参りました。タイトルのようにIF関数に問題があるのかわわかりませんが・・・ 下のコードは、[追加]シートの一部の範囲のデータを[シート]シートのデータの一番下にコピーして、その状態で、AH列に見出しを設けて、I列の漢字で書いてある指定の色をカタカナ表記にするものですが、問題は、[追加]シートから転記される前の、もともと[シート]にあるデータは、白→ホワイトのように変わっているのですが、[追加]シートの転記分は何も変化がありません。何がひっかかっているのか考えてもみつけ られまんでした。ご教授願いたいとおもいます。 With Worksheets("追加").Range("AA1").CurrentRegion .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2).Copy End With Worksheets("追加").Range("C65536").End(xlUp).Offset(1). _ PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Worksheets("シート").Range("AH1").Value = "カラー" With Worksheets("シート").Range("AH2").Resize(r - 1, 1) .FormulaR1C1 = _ "=IF(RC[-25]=""白"",""ホワイト""," & _ "IF(RC[-25]=""赤"",""レッド""," & _ "IF(RC[-25]=""黒"",""ブラック""," & _ "IF(RC[-25]=""黄色"",""イエロー"",""カラー""))))" End With Application.CutCopyMode = False

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 文章とマクロは合っていませんね。 [追加]シートの一部の範囲のデータを[シート]シートのデータの一番下にコピーして、   ↓ × Worksheets("追加").Range("C65536").End(xlUp).Offset(1).    Worksheets("シート").Range("C65536").End(xlUp).Offset(1). >その状態で、AH列に見出しを設けて、  With Worksheets("シート").Range("AH2").Resize(r - 1, 1)   何を基準にして、r を決めるか? たとえば、C列だとしたら、     r = Worksheets("シート").Range("C65536").End(xlUp).Row

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

その他の回答 (4)

noname#79209
noname#79209
回答No.5

なにもVBAを使わなくても、「置換」で済むように思えますが...

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

>[追加]シートの一部の範囲のデータを[シート]シートのデータの一番下にコピーして → 追加シートにPasteしているように思います。 >[追加]シートの転記分は何も変化がありません → 質問文のVBAでは、追加シートには何の関数式も格納していないようですが、元々関数が入力されているのですか? 質問文のVBAどおりなら何も変わらないと思います

すると、全ての回答が全文表示されます。
noname#32244
noname#32244
回答No.2

こんにちは。 今回のように条件が多くなる場合は、 標準モジュールにユーザー定義関数を作成して、 セルから呼び出して使うほうが修正しやすく便利だと思いますよ。 Public Sub ps_ChangeValue(sValue As String) Dim sRes As String sRes = "カラー" Select Case sValue Case "白" sRes = "ホワイト" Case "赤" sRes = "レッド" Case "黒" sRes = "ブラック" Case "黄色" sRes = "イエロー" End Select ps_ChangeValue = sRes End Sub Worksheets("シート").Range("AH2").Resize(r - 1, 1) .FormulaR1C1 = "=ps_ChangeValue(RC[-25])" 動作確認していませんし、 エラーコードなしですが、 ご参考になれば幸いです。

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

ざっと眺めただけで理解していませんが。 "=IF(RC[-25]=""白"",""ホワイト""," & _ "IF(RC[-25]=""赤"",""レッド""," & _ "IF(RC[-25]=""黒"",""ブラック""," & _ "IF(RC[-25]=""黄色"",""イエロー"",""カラー""))))" これをセルの中の値として入れるんですよね? で、あれば、IF文がおかしいかもしれないので、 セルに直接書いてデバッグしてみてはいかがでしょうか? また、これ、VBAじゃないとできませんか? セルの関数だけでできる気がします。 できなくても必要なところだけVBAにして、 VBAでセルの関数を表示するのをやめた方が無難かと思います。

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

関連するQ&A