Excel VBA質問箱 IV

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

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


2463 / 13645 ツリー ←次へ | 前へ→

【67892】固定されていない任意の4桁の数字を置換する方法 hoully 11/1/14(金) 18:42 質問[未読]
【67893】Re:固定されていない任意の4桁の数字を置換... kanabun 11/1/14(金) 20:18 発言[未読]
【67894】Re:固定されていない任意の4桁の数字を置換... kanabun 11/1/14(金) 20:20 発言[未読]
【67897】Re:固定されていない任意の4桁の数字を置換... kanabun 11/1/15(土) 0:08 発言[未読]
【67898】Re:固定されていない任意の4桁の数字を置換... hoully 11/1/15(土) 7:39 お礼[未読]

【67892】固定されていない任意の4桁の数字を置換...
質問  hoully  - 11/1/14(金) 18:42 -

引用なし
パスワード
   ご質問させていただきます。A1セルからC8まで例えばAAAAA5308BDKLUとかAAAAA5308CCBBDという文字列が記載されています(ただし、C2セルだけは空白です)。要するに、最初の5桁は同じ文字、次の4桁が数字、最後の5桁は規則性が全くない文字列です。やりたいことは、固定されていない任意の4桁の数字を置換することです。上記の例でいえば、5308を他の4桁の数字、例えば0919に置換したいのですが、4桁の数字が常に5308で固定されているならReplace What:="5308", Replacement:="0919"でいけるのですが、置換前の数字は常に5308で固定されているのではなく、また、置換したい新しい数字も常に0919なわけではありません。しかも、C2セルに置換したい新しい数字(0919)を入力することによって置換を実行したいのです。さらに、置換前の数字を自分で入力せずに(自分で5308と入力せずに)、5308を自動的に認識して、0919に置換したいのです。自分で入力するのはあくまでも置換したい新しい数字(0919)だけです。要するに、事前に私が指定した不規則な4桁の数字を、自分でC2セルに新しい4桁の数字を入力することによって置換したいのです。やりたいことをもう一度例を用いて説明いたしますと、最初に7203と入力されている数字をC2セルに5401と打ち込むことによって7203を5401に置き換えたいのです。
色々考えてみたのですが、全く思いつきませんでした。どなたか教えていただけないでしょうか?よろしくお願いいたします。ちなみに、当方のVBAの知識は初心者レヴェルです。よろしくお願いいたします。

【67893】Re:固定されていない任意の4桁の数字を置...
発言  kanabun  - 11/1/14(金) 20:18 -

引用なし
パスワード
   ▼hoully さん:こんにちは〜

質問文には、適当に改行をいれたほうがいいですよ

> A1セルからC8まで例えばAAAAA5308BDKLUとかAAAAA5308CCBBDという文字列が
> 記載されています(ただし、C2セルだけは空白です)。

> やりたいことは、固定されていない任意の4桁の数字を置換することです。
> 上記の例でいえば、5308を他の4桁の数字、例えば0919に置換したいのですが、

置換したい部分は 「文字列中の4文字目からはじまる4桁の数字」ということ
に共通性はあるのですか?

もしそうなら、VBAのLeft$関数、Mid$関数や
ワークシート関数の REPLACE を使いセルをLoopすれば処理できると思います。

ワークシート関数のRelaceを Applicationクラスのメソッドとして使えば、
範囲を一括置換処理することもできます。

ただ、C2に置換後の文字列を入力すると、という条件が、処理を難しく
していますが。。。

【67894】Re:固定されていない任意の4桁の数字を置...
発言  kanabun  - 11/1/14(金) 20:20 -

引用なし
パスワード
   失礼

>置換したい部分は 「文字列中の4文字目からはじまる4桁の数字」
               ▼
置換したい部分は 「文字列中の 6文字目からはじまる4桁の数字」

でしたか?

【67897】Re:固定されていない任意の4桁の数字を置...
発言  kanabun  - 11/1/15(土) 0:08 -

引用なし
パスワード
   >ワークシート関数のRelaceを Applicationクラスのメソッドとして使えば、
>範囲を一括置換処理することもできます。

というのは、こんなことです

'「6文字目からはじまる4桁の数字」を[C2]セルの数字に置換
Sub Try1()
 Dim ss As String
 ss = Range("C2").Value
 With Range("A1:C8")
   .Value = Application.Replace(.Cells, 6, 4, ss)
 End With'  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Range("C2").Value = ss
End Sub

【67898】Re:固定されていない任意の4桁の数字を置...
お礼  hoully  - 11/1/15(土) 7:39 -

引用なし
パスワード
   ▼kanabun さん:

ご回答ありがとうございます。
改行の件は失礼いたしました。大変読みにくい質問文でした。申し訳ありません。
left関数やmid関数の存在を知りませんでした。
以下のプロシージャーを考えてくださって本当にありがとうございます。
kanabunさんから教えていただいたことを使ってもう一度考えてみます。
この度は、ありがとうございました。

>'「6文字目からはじまる4桁の数字」を[C2]セルの数字に置換
>Sub Try1()
> Dim ss As String
> ss = Range("C2").Value
> With Range("A1:C8")
>   .Value = Application.Replace(.Cells, 6, 4, ss)
> End With'  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Range("C2").Value = ss
>End Sub

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