プロが教える店舗&オフィスのセキュリティ対策術

また、質問させていただきます。下のコードは見よう見真似で作りましたが、問題が出まして、質問に参りました。タイトルのように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

A 回答 (5件)

こんにちは。



文章とマクロは合っていませんね。

[追加]シートの一部の範囲のデータを[シート]シートのデータの一番下にコピーして、
  ↓

× 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
    • good
    • 0

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

    • good
    • 0

>[追加]シートの一部の範囲のデータを[シート]シートのデータの一番下にコピーして


→ 追加シートにPasteしているように思います。

>[追加]シートの転記分は何も変化がありません
→ 質問文のVBAでは、追加シートには何の関数式も格納していないようですが、元々関数が入力されているのですか?
質問文のVBAどおりなら何も変わらないと思います
    • good
    • 0

こんにちは。


今回のように条件が多くなる場合は、
標準モジュールにユーザー定義関数を作成して、
セルから呼び出して使うほうが修正しやすく便利だと思いますよ。

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])"

動作確認していませんし、
エラーコードなしですが、
ご参考になれば幸いです。
    • good
    • 0

ざっと眺めただけで理解していませんが。



"=IF(RC[-25]=""白"",""ホワイト""," & _
"IF(RC[-25]=""赤"",""レッド""," & _
"IF(RC[-25]=""黒"",""ブラック""," & _
"IF(RC[-25]=""黄色"",""イエロー"",""カラー""))))"

これをセルの中の値として入れるんですよね?
で、あれば、IF文がおかしいかもしれないので、
セルに直接書いてデバッグしてみてはいかがでしょうか?

また、これ、VBAじゃないとできませんか?
セルの関数だけでできる気がします。
できなくても必要なところだけVBAにして、
VBAでセルの関数を表示するのをやめた方が無難かと思います。
    • good
    • 0

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