Excel VBA質問箱 IV

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

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


8801 / 13646 ツリー ←次へ | 前へ→

【30999】文字置換のループ処理で解決ですか? komo 05/11/8(火) 22:58 質問[未読]
【31005】Re:文字置換のループ処理で解決ですか? Kein 05/11/8(火) 23:29 回答[未読]
【31044】Re:文字置換のループ処理で解決ですか? komo 05/11/9(水) 22:46 お礼[未読]
【31047】Re:文字置換のループ処理で解決ですか? Kein 05/11/9(水) 23:18 発言[未読]
【31070】Re:文字置換のループ処理で解決ですか? komo 05/11/11(金) 11:39 お礼[未読]
【31072】Re:文字置換のループ処理で解決ですか? Kein 05/11/11(金) 12:02 発言[未読]
【31114】Re:文字置換のループ処理で解決ですか? PI 05/11/11(金) 20:10 発言[未読]

【30999】文字置換のループ処理で解決ですか?
質問  komo  - 05/11/8(火) 22:58 -

引用なし
パスワード
   はじめまして、マクロ+文字置換を模索中でここへたどりつきました。。

A      B
1234  =ABC|@DEF
4321  =ABC|@DEF
2222  =ABC|@DEF
4567  =ABC|@DEF
3345  =ABC|@DEF
2346  =ABC|@DEF

A列の数字を参照し、置換でB列の@にA列の数字を記入したいと考えております。
A列の数字はランダムに変化。A列の行数も毎回異なります。


Sub Macro1()
Range("A1").Select
Selection.Copy
Cells.Replace What:="@", Replacement:="1234", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End Sub


マクロで置換操作を記入しましたが、初心者のためループ処理記述でとまっております。
ご教授願えませんでしょうか。よろしくお願いいたします。


【31005】Re:文字置換のループ処理で解決ですか?
回答  Kein  - 05/11/8(火) 23:29 -

引用なし
パスワード
   拝見したところ、@ の前後の文字は一定のようですが、それなら

Sub Test()
  With Range("A1", Range("A65536").End(xlUp)).Offset(, 1)
   .Formula = "=""ABC|""&$A1&""DEF""
   .Value = .Value
  End With
End Sub

ぐらいで出来ると思います。

【31044】Re:文字置換のループ処理で解決ですか?
お礼  komo  - 05/11/9(水) 22:46 -

引用なし
パスワード
   Kein様、早速のご回答ありがとうございます。

回答を試してみました、入力結果はB行にそれぞれABC123DEFと表示されました。

ありがとうございます。

実はB列に記入してあるのが、関数でして、
B行に関数で=ABC|'123.DEFとした場合計算エラーとなってしまいます。

おそらく置換後の値が文字列として認識されていることが原因となっているかと思いますが、、、

改善するよきアドバイスをいただければと思います。

【31047】Re:文字置換のループ処理で解決ですか?
発言  Kein  - 05/11/9(水) 23:18 -

引用なし
パスワード
   >関数で=ABC|'123.DEF
これって関数なんですか ? だとしたら私は知りません。申しわけないけど。
>置換後の値が文字列として認識
は、確かでしょう。数式には変数など使えなかったはずですから。
で、もしそれが、他のシートへの参照をしたいという意味の数式なら、全然別の書き方
になりますよ。試しにこちらで、その"数式と称するもの"を入力してみましたが
名前が正しくない、というエラーを返されました。よってそのように推測したのですが。

【31070】Re:文字置換のループ処理で解決ですか?
お礼  komo  - 05/11/11(金) 11:39 -

引用なし
パスワード
   Keinさん お返事ありがとうございます。

他のシートを参照しているのではとの指摘ございましたが、エクセルの記述をよーくみなおしたところ、実際の利用としては、別のシートを参照する記述だと思います。

某スプレッドシート値を得る数式で、@を手打ちでA列の数字に変更すると、B列セルに結果を数値で返す記述なので、結果が文字列ではエラーになってしまいます。。

もしよろしければ、別シート参照の記述方法もご指導いただけないでしょうか??

一般的には =シート名称!参照セルとなるはずですが、、、このスプレッドシートの記述方法だと   =RSS|’1234.T'!PERとなってます。

宜しくお願いします。

【31072】Re:文字置換のループ処理で解決ですか?
発言  Kein  - 05/11/11(金) 12:02 -

引用なし
パスワード
   >別シート参照の記述方法
は、あなたの考えているとおり、=シート名!A1 などです。ただ・・
スプレットシートと言うと、表計算ソフトの一般的な名前、もしくはユーザーフォーム
で使う特殊なコントロールの名前になりますが、そーいうことでしょーか ?
普通のワークシートには RSS|’1234.T' という名前は使えませんね。もし
ユーザーフォームなどで使うスプレットシートコントロールでしたら、そのような
名前が使えるのかどうか知りませんが、たとえ使えたとしても、わざわざそんな
複雑な名前を付けるメリットがあるように思えないので、そちらで適当に、単純な
名前に変更された方が良いと思います。それでやっと出発点に立てる、という
感じがしますが、その先の
>@を手打ちでA列の数字に変更すると、B列セルに結果を数値で返す記述
となるとますます、何でそんなややこしいことをしているのか、そしてその記述も
さっぱり分からないため、かなりの困難が伴う予感がしますけどね・・。

【31114】Re:文字置換のループ処理で解決ですか?
発言  PI  - 05/11/11(金) 20:10 -

引用なし
パスワード
   ▼komoさん
突然すみません。お邪魔します。

Keinさんの最初の解答で「=」(イコール)が出れば良いのではないですか?
素晴らしい複合参照のコードに感激した次第ですが。

それではだめなんでしょうか?試してください。(komoさんの言われるように
=(イコール)もでます。)

Sub Test1()
  With Range("A5", Range("A65536").End(xlUp)).Offset(, 1)
   .Formula = "=""=ABC|""&$A5&""DEF"""
  End With
End Sub

もう一つReplaceで考えて見ました
Sub test2 () 
Dim i As Long
For i = Range("A65536").End(xlUp).Row To 5 Step -1
Cells(i, 2).Replace What:="*~@*", Replacement:=" =ABC|" & Cells(i, 1).Value & "DEF"
Next
End Sub

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