Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7024 / 13644 ツリー ←次へ | 前へ→

【41675】置き換えについて Pi 06/8/19(土) 14:02 質問[未読]
【41676】Re:置き換えについて だるま 06/8/19(土) 14:26 回答[未読]
【41681】Re:置き換えについて Pi 06/8/19(土) 18:30 お礼[未読]
【41687】Re:置き換えについて だるま 06/8/20(日) 8:37 回答[未読]
【41691】Re:置き換えについて Pi 06/8/20(日) 10:35 質問[未読]
【41692】Re:置き換えについて だるま 06/8/20(日) 11:07 回答[未読]
【41693】Re:置き換えについて Pi 06/8/20(日) 13:14 お礼[未読]

【41675】置き換えについて
質問  Pi  - 06/8/19(土) 14:02 -

引用なし
パスワード
      A  B             G         H
  項目              (置き換え前) (置き換え後)
:
11  OOO              OOO       AAA
12  PPP              PPP       BBB
13  QQQ              QQQ       EEE
14  RRR              RRR       CCC
:                  UUU       GGG

分類している名称(例えば「OOO」や「PPP」・・・などを→「AAA」や「BBB」に
変更・置き換えをしたく下のようなコードを使っています。
名称が益々増えコードの行が増え続けています。
このコードをもっとシンプルに仕上げる方法を教えてください。

Dim R As Range
Dim MyR As Range

Set MyR = Range("A11", Range("A65536").End(xlUp))
For Each R In MyR

If R.Value = "OOO" Then R.Value = "AAA"
If R.Value = "PPP" Then R.Value = "BBB"
If R.Value = "QQQ" Then R.Value = "EEE"
If R.Value = "RRR" Then R.Value = "CCC"
      ':
      ':
Next


またG列に名称の(置き換え前)と(置き換え後)のテーブルを
作成してコードを作るのも検討したく思いますが、どのように
参照させ置き換えればよいかお願いします。

【41676】Re:置き換えについて
回答  だるま WEB  - 06/8/19(土) 14:26 -

引用なし
パスワード
   こんな感じでいかがでしょうか。^d^

Sub Okikae()
  Dim Table As Range
  Dim Target As Range
  Dim R As Range
  
  Set Table = Range("G11")
  Set Table = Range(Table, Table.End(xlDown)).Resize(, 2)
  
  Set Target = Range("A11")
  Set Target = Range(Target, Target.End(xlDown))
  
  For Each R In Table.Rows
    Target.Replace R.Cells(1).Value, R.Cells(2).Value
  Next
End Sub

【41681】Re:置き換えについて
お礼  Pi  - 06/8/19(土) 18:30 -

引用なし
パスワード
   ▼だるま さん:

ありがとうございます。
これで、名称の置き換えが自在にでき、問題が解決できます。
お蔭様で、有効に活用させていただきます。

>Sub Okikae()
>  Dim Table As Range
>  Dim Target As Range
>  Dim R As Range
>  
>  Set Table = Range("G11")
>  Set Table = Range(Table, Table.End(xlDown)).Resize(, 2)
>  
>  Set Target = Range("A11")
>  Set Target = Range(Target, Target.End(xlDown))
>  
>  For Each R In Table.Rows
>    Target.Replace R.Cells(1).Value, R.Cells(2).Value
この上の2行ですが、なんと無く理解できるのですが、いまひとつ
正しい理解が出来ておりません。もしコメントいただければ
幸いです。
>  Next
>End Sub

ありがとうございました。これからもよろしくお願いします。

【41687】Re:置き換えについて
回答  だるま WEB  - 06/8/20(日) 8:37 -

引用なし
パスワード
   >>  For Each R In Table.Rows
>>    Target.Replace R.Cells(1).Value, R.Cells(2).Value
>この上の2行ですが、なんと無く理解できるのですが、いまひとつ
>正しい理解が出来ておりません。もしコメントいただければ
>幸いです。

変換テーブルの各行について繰り返し
置換え対象範囲に対して置換え(Replace)実行、元の値、置換え後の値

といったところでしょうか。^d^

ところで、Replaceにはオプションの指定がいくつかあります。完全一致か部分一致か、
大文字小文字の区別有り無しなどです。提示のコードでは省略してしまいましたが出来
るだけ指定した方が良いです。詳しくはヘルプをご覧ください。

【41691】Re:置き換えについて
質問  Pi  - 06/8/20(日) 10:35 -

引用なし
パスワード
   ▼だるま さん:

ありがとうございました。Replaceのオプションも
理解できました。
それから
少し質問の仕方が間違っていましたが・・・

ここでのCells(1)やCells(2)の意味合いが分からないのです。
例えば

Sub Cell_Select()
  Cells(1).Select
  Cells(2).Select
End Sub
はCells(1)はA1、Cells(2)はA2を選択し、カッコ内の数字はX軸側の移動に
なっていますが
Sub R_Select()
 Dim Rw As Integer
 Dim R As Range
 Dim MyR As Range

 Set MyR = Range("A6", Range("A65536").End(xlUp))
  For Each R In MyR '.Row
   R.Cells(2).Select
  Next
End Sub
これではCells(2)はY軸に移動させることになりますが、
このCells括弧の中の数字の意味合いが分からないのですが、
あるいは勘違いしているのでしょうか?

貴殿からいただいたコードはやはり
Cells(1).ValueとCells(2).Valueがありましたが
相対的な参照をしているのでしょうか・・・

【41692】Re:置き換えについて
回答  だるま WEB  - 06/8/20(日) 11:07 -

引用なし
パスワード
   >Cells(1).ValueとCells(2).Valueがありましたが
>相対的な参照をしているのでしょうか・・・
はい、ただし「.」を見落とさないでくださいね。^d^

適当なセル範囲を選択して下記を実行してみてください。.Cells(i)がどういう順番で
指定されて行くかが分かると思います。

Sub test1()
  Dim i As Integer
  With Selection
    For i = 1 To .Cells.Count
      .Cells(i).Value = i
    Next
  End With
End Sub

【41693】Re:置き換えについて
お礼  Pi  - 06/8/20(日) 13:14 -

引用なし
パスワード
   ▼だるま さん:

ご指導ありがとうございました。
理解できました。適切なサンプルを頂きありがとう
ございます。

今後ともよろしくお願いします。

7024 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free