人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル VBA の質問です。A1の値に犬,A2に猫,A3に狸がはいっています。t = Range("A1:A3").Value2 としたときに、
1番目の犬を見て、変換かけて元に戻すのはどうしたらいいでしょうか? たとえば、犬はdog に 猫はcat と翻訳して、tの中身を変更したいのです。


●質問者: kaiketsu
●カテゴリ:コンピュータ
✍キーワード:A1 A3 VBA エクセル 翻訳
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●35ポイント

セルを直接操作さずに変数を変更するということですね。

tは2次元配列となるので次でよろしいかと。

Sub test()
 Dim t As Variant
 Dim i As Integer
 t = Range("A1:A3").Value2
 
 For i = 1 To UBound(t)
 Select Case t(i, 1)
 Case "犬"
 t(i, 1) = "dog"
 Case "猫"
 t(i, 1) = "cat"
 Case "狸"
 t(i, 1) = "tanuki"
 End Select
 Next i
 
  'テスト
 For i = 1 To UBound(t)
 Debug.Print t(i, 1)
 Next i
End Sub

http://q.hatena.ne.jp/

◎質問者からの返答

試してみます。! ありがとうございました。


2 ● kn1967
●35ポイント

例1:条件分岐:データ増減によってプログラム改変&動作テストという手間が発生

Sub Macro1()
 Dim t As Range, v As Variant
 Set t = Range("A1:A3")
 For Each v In t
 v.Value2 = fun1(v.Value2)
 Next v
End Sub

Function fun1(v As Variant) As Variant
 Select Case v
 Case "犬"
 fun1 = "dog"
 Case "猫"
 fun1 = "cat"
 Case "狸"
 fun1 = "racoon"
 Case Else
 fun1 = v
 End Select
End Function

例2:連想配列:コードが見やすくなる分、上記よりは少しマシなだけ

Sub Macro2()
 Dim d As Object
 Set d = CreateObject("Scripting.Dictionary")
 d.Add "犬", "dog"
 d.Add "猫", "cat"
 d.Add "狸", "racoon"

 Dim t As Variant, v As Variant
 t = Range("A1:A3").Value2
 For Each v In t
 v = d(v)
 Debug.Print v
 Next v
End Sub

例3:Excelワークシート関数:データの増減に自動対応、ネイティブ動作のため処理も高速

Sub Macro3()
 Dim t As Variant, v As Variant
 t = Range("A1:A3").Value2
 For Each v In t
 v = WorksheetFunction.VLookup(v, Range("Sheet2!A1:B" & Worksheets("Sheet2").Range("a65535").End(xlUp).Row), 2, False)
 Debug.Print v
 Next v
End Sub

Sheet2 に以下のようにデータを入れてます。

A B
1 dog
2 cat
3 racoon

http://q.hatena.ne.jp/dummy

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ