Excel VBA質問箱 IV

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

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


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

【74561】文字列を数値へ一括変換したい。 アラユタン 13/7/24(水) 12:00 質問[未読]
【74562】Re:文字列を数値へ一括変換したい。 kanabun 13/7/24(水) 12:37 発言[未読]
【74563】Re:文字列を数値へ一括変換したい。 アラユタン 13/7/24(水) 14:56 質問[未読]
【74564】Re:文字列を数値へ一括変換したい。 アラユタン 13/7/24(水) 15:36 質問[未読]
【74565】Re:文字列を数値へ一括変換したい。 kanabun 13/7/24(水) 17:14 発言[未読]
【74567】Re:文字列を数値へ一括変換したい。 アラユタン 13/7/25(木) 16:46 お礼[未読]

【74561】文字列を数値へ一括変換したい。
質問  アラユタン  - 13/7/24(水) 12:00 -

引用なし
パスワード
   全てのシートのA列を文字列から数値変換したいのですが、
どのように記述すればよいでしょうか。

お願いします。

【74562】Re:文字列を数値へ一括変換したい。
発言  kanabun  - 13/7/24(水) 12:37 -

引用なし
パスワード
   ▼アラユタン さん:

A列の対象範囲を選択して、
まず、表示形式を「標準」に戻しておいてから、
[データ]メニュ−の [区切り位置]で
<次へ> <次へ> <ok> で 数値になります。

【74563】Re:文字列を数値へ一括変換したい。
質問  アラユタン  - 13/7/24(水) 14:56 -

引用なし
パスワード
   ▼kanabun さん:
>▼アラユタン さん:
>
>A列の対象範囲を選択して、
>まず、表示形式を「標準」に戻しておいてから、
>[データ]メニュ−の [区切り位置]で
><次へ> <次へ> <ok> で 数値になります。

ご回答ありがとうございます。

全シートを対象にしたいのです。

私のイメージでは以下のようなソースになるのですが、

Sub Sample()
  For Each sh In ActiveWorkbook.Worksheets
    For Each xCell In Range("A1:A10")
      sh.xCell.Value = sh.xCell.Value
    Next xCell
  Next sh
End Sub

うまく動作してくれません。
ご教示願いします。

【74564】Re:文字列を数値へ一括変換したい。
質問  アラユタン  - 13/7/24(水) 15:36 -

引用なし
パスワード
   ▼アラユタン さん:
>▼kanabun さん:
>>▼アラユタン さん:
>>
>>A列の対象範囲を選択して、
>>まず、表示形式を「標準」に戻しておいてから、
>>[データ]メニュ−の [区切り位置]で
>><次へ> <次へ> <ok> で 数値になります。
>
>ご回答ありがとうございます。
>
>全シートを対象にしたいのです。
>
>私のイメージでは以下のようなソースになるのですが、
>
>Sub Sample()
>  For Each sh In ActiveWorkbook.Worksheets
>    For Each xCell In Range("A1:A10")
>      sh.xCell.Value = sh.xCell.Value
>    Next xCell
>  Next sh
>End Sub
>
>うまく動作してくれません。
>ご教示願いします。

自己解決致しました。
Sub Sample()

  For Each sh In ActiveWorkbook.Worksheets
    For Each xCell In Worksheets(sh.name).Range("A1:A100")
      xCell.Value = xCell.Value
    Next xCell
  Next sh

End Sub

上記にて欲しい結果となりました。
ただ処理速度がものすごく遅いのですが、
改善できそうな箇所はないでしょうか。

宜しくお願いします。

【74565】Re:文字列を数値へ一括変換したい。
発言  kanabun  - 13/7/24(水) 17:14 -

引用なし
パスワード
   ▼アラユタン さん:


>自己解決致しました。
>Sub Sample()
>
>  For Each sh In ActiveWorkbook.Worksheets
>    For Each xCell In Worksheets(sh.name).Range("A1:A100")
>      xCell.Value = xCell.Value
>    Next xCell
>  Next sh
>
>End Sub
>
>上記にて欲しい結果となりました。

なあんだ、A列の表示形式は「文字列」じゃなかったんですか

>ただ処理速度がものすごく遅いのですが、
>改善できそうな箇所はないでしょうか。

1.まず、変数は型をきちんとつけて宣言しましょう。
2.範囲.Value = 範囲.Value で 数値になるのなら、1セルずつLoopしなくても
 一括でいいはずですよ
3.セルに対する処理はできるだけ一回で済ませたほうがいいのですが、
 今回のように 範囲.Value = 範囲.Value が処理のほとんどであるような
 ときは、画面更新を制御するといいかもしれない。

Option Explicit

Sub Sample()
  Dim sh As Worksheet  '----(1)
  
  Application.ScreenUpdating = False   '----(3)
  For Each sh In ActiveWorkbook.Worksheets
    With sh.Range("A1:A1000")     
      .Value = .Value        '----(2)
    End With
  Next sh
  Application.ScreenUpdating = True   '----(3)

End Sub

【74567】Re:文字列を数値へ一括変換したい。
お礼  アラユタン  - 13/7/25(木) 16:46 -

引用なし
パスワード
   ▼kanabun さん:
何度もご回答頂き、ほんとうに助かりました。
私が無知で説明がうまくできておらず、申し訳ありませんでした。

kanabun様の回答を参考になんとか欲しい結果を
出すことができました。

そもそも文字列を数値に変換する必要すらありませんでした(汗)

kanabun様のようにスマートにソースが記述できるように
頑張りたいと思います。

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