Excel VBA質問箱 IV

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

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


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

【23689】For Next で・・・ モリゾー 05/4/1(金) 21:26 質問[未読]
【23692】Re:For Next で・・・ ちゃっぴ 05/4/1(金) 21:36 発言[未読]
【23694】Re:For Next で・・・ モリゾー 05/4/1(金) 22:09 お礼[未読]
【23701】Re:For Next で・・・ ちゃっぴ 05/4/2(土) 0:49 発言[未読]
【23693】Re:For Next で・・・ ponpon 05/4/1(金) 21:40 回答[未読]
【23695】Re:For Next で・・・ モリゾー 05/4/1(金) 22:18 お礼[未読]
【23703】Re:For Next で・・・ YN61 05/4/2(土) 8:44 発言[未読]
【23740】Re:For Next で・・・ ちゃっぴ 05/4/3(日) 1:20 発言[未読]

【23689】For Next で・・・
質問  モリゾー  - 05/4/1(金) 21:26 -

引用なし
パスワード
   皆様よろしくお願いします。

セルA1〜A1000には0から1000までのランダムな数値が入っています。
(全て整数です)
その数値の末尾にmmを付けるプログラムを下記のようにしたのですが、
変換された数値は、セルの数値が15だったら1mm5mmとなってしまいます。
これを15mmとするにはどうしたらよいでしょうか。

Sub Henkan()
Dim i As Integer

Range("A1:A1000").Select

For i = 0 To 1000
  Selection.Replace What:=i, Replacement:=i & "mm"
  Next
End Sub

【23692】Re:For Next で・・・
発言  ちゃっぴ  - 05/4/1(金) 21:36 -

引用なし
パスワード
   なぜ、Replace Methodを使用するかが非常に疑問ですが…

この場合、部分一致を完全一致に切り替えてやれば解決するでしょう。

ただ、Replace Methodの基本は、Find Methodと同じなので、
引数を省略すると想定外のことが発生します。

Helpでご確認ください。

普通はこんなんでいいでしょう。

Dim rngTarget As Excel.Range

For Each rngTarget In Range("A1:A1000")
  rngTarget.Value = rngTarget.Value & "mm"
Next rngTarget

速度を求めるなら、配列を使って

Dim vntData As Variant
Dim i As Long

vntData = Range("A1:A1000").Value
For i = 1 To 1000
  vntData(i, 1) = vntData(i, 1) & "mm"
Next i
Range("A1:A1000").Value = vntData

【23693】Re:For Next で・・・
回答  ponpon  - 05/4/1(金) 21:40 -

引用なし
パスワード
   ponponです。こんばんは。

これでいけると思います。

Sub Henkan()
Dim myRng As Range
Dim r As Range

Set myRng = Range("A1:A1000")
For Each r In myRng
  r.Value = r.Value & "mm"
  Next
End Sub

【23694】Re:For Next で・・・
お礼  モリゾー  - 05/4/1(金) 22:09 -

引用なし
パスワード
   ▼ちゃっぴ さん:
早速のご返答ありがとうございます。
うまく行きました。
自動記録から編集する方法しか知らなかったのでこんな方法しか思いつきませんでしたが、勉強になりました。

【23695】Re:For Next で・・・
お礼  モリゾー  - 05/4/1(金) 22:18 -

引用なし
パスワード
   ponpon さん:
早速のご返答ありがとうございます。
こちらもうまく行きました。
私はモノ作りしか知らないVBA初心者です。
(とんちんかんをやっているのかもしれない・・・)と投稿するのに迷いましたが、やってみてよかったです。

【23701】Re:For Next で・・・
発言  ちゃっぴ  - 05/4/2(土) 0:49 -

引用なし
パスワード
   > 自動記録から編集する方法しか知らなかったのでこんな方法しか
> 思いつきませんでしたが、勉強になりました。

人の書いたSampleを見て勉強することも役には立ちますが、
それ以上に自分で考えてみることが一番重要です。

ほとんどの制御は条件分岐(If等)と
Loop(実はGotoでも)で表せるんですよね。

Excelに用意されている便利なMethodとかを知るのも有効ですが、
それ自体をProgramingしてみるとより理解が深まるでしょう。

そういうことを理解するようになるとある程度Performanceが
予測できたりします。

【23703】Re:For Next で・・・
発言  YN61  - 05/4/2(土) 8:44 -

引用なし
パスワード
   ▼モリゾー さん:
おはようございます。皆様の回答を見させていただき勉強させていただいています。
ありがとうございます。
モリゾー さん、「mm」が数字の単位ですと、数字のまま生かしたい場合は・・・
このようなことは如何でしょう。?

Sub Henkan()   '数字のあるところのみmmが付き数字を維持する
Dim myRng As Range
Dim r As Range

Set myRng = Range("A1", Cells(Rows.Count, 1).End(xlUp))
For Each r In myRng
  r.NumberFormatLocal = "###""mm"""
Next
End Sub

【23740】Re:For Next で・・・
発言  ちゃっぴ  - 05/4/3(日) 1:20 -

引用なし
パスワード
   >モリゾー さん、「mm」が数字の単位ですと、数字のまま生かしたい場合は・・・
>このようなことは如何でしょう。?
>
>Sub Henkan()   '数字のあるところのみmmが付き数字を維持する
>Dim myRng As Range
>Dim r As Range
>
>Set myRng = Range("A1", Cells(Rows.Count, 1).End(xlUp))
>For Each r In myRng
>  r.NumberFormatLocal = "###""mm"""
>Next
>End Sub

そのほうがいいでしょうね。
もっとも、Loopは不要に思います。

Sub Henkan()   '数字のあるところのみmmが付き数字を維持する
Dim myRng As Range

Set myRng = Range("A1", Cells(Rows.Count, 1).End(xlUp))
  myRng.NumberFormatLocal = "###""mm"""
End Sub

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