こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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

投稿日時 - 2007-06-09 09:28:37

QNo.3068984

すぐに回答ほしいです

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

こんにちは。

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

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

× 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

投稿日時 - 2007-06-09 14:49:39

ANo.4

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

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

投稿日時 - 2007-06-10 11:21:20

ANo.3

>[追加]シートの一部の範囲のデータを[シート]シートのデータの一番下にコピーして
→ 追加シートにPasteしているように思います。

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

投稿日時 - 2007-06-09 12:30:14

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

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

投稿日時 - 2007-06-09 12:21:57

ANo.1

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

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

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

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

投稿日時 - 2007-06-09 11:41:16

あなたにオススメの質問