Excel VBA質問箱 IV

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

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


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

【64485】セルの書式変更(文字列⇒数値) vba初心者 10/2/15(月) 11:44 質問[未読]
【64487】Re:セルの書式変更(文字列⇒数値) 名無し 10/2/15(月) 12:24 回答[未読]
【64488】Re:セルの書式変更(文字列⇒数値) vba初心者 10/2/15(月) 13:22 質問[未読]
【64489】Re:セルの書式変更(文字列⇒数値) SS 10/2/15(月) 14:25 発言[未読]
【64491】Re:セルの書式変更(文字列⇒数値) vba初心者 10/2/15(月) 14:39 発言[未読]
【64494】Re:セルの書式変更(文字列⇒数値) SS 10/2/15(月) 15:29 発言[未読]
【64505】Re:セルの書式変更(文字列⇒数値) vba初心者 10/2/16(火) 10:33 お礼[未読]
【64497】Re:セルの書式変更(文字列⇒数値) 名無し 10/2/15(月) 16:12 回答[未読]
【64498】Re:セルの書式変更(文字列⇒数値) Jaka 10/2/15(月) 16:29 発言[未読]
【64506】Re:セルの書式変更(文字列⇒数値) vba初心者 10/2/16(火) 10:34 お礼[未読]

【64485】セルの書式変更(文字列⇒数値)
質問  vba初心者  - 10/2/15(月) 11:44 -

引用なし
パスワード
   はじめまして。

VBA初心者です。分からないことが出てきましたのでご教授お願いします。


A列のセルを上から順に検索して行き、
セルの書式が文字列があったとき、数値に変更するようにしました。

以下のようにVBAを記述したのですが、
これを実行するとセル「A1」が「0」に書き換わってしまいます。

「0」に書き換わることなく終わらせたいのですが
どうすればよいでしょうか。

'セルの書式が「文字列」のものを「数値」に変換
Private Sub changeNumber()

  Dim i As Long
  Dim s As Range
  Set file2 = Workbooks("AAA.xls")

  For i = 1 To file2.Worksheets("sheet").Range("A65536").End(xlUp).Row  'A列全てを検索対象とする
  
   If VarType(file2.Worksheets("sheet").Range("A" & i).Value) = vbString Then 'A列の中で文字列のセルがあったとき
    
    Set s = file2.Worksheets("sheet").Range("A" & i)
    file2.Worksheets("sheet").Range("A" & i) = Val(s) '数値に変換
    
   End If
  
  Next i
       
End Sub

以上、よろしくお願いいたします。

【64487】Re:セルの書式変更(文字列⇒数値)
回答  名無し  - 10/2/15(月) 12:24 -

引用なし
パスワード
   ▼vba初心者 さん:

こんにちは

意味が良く分からないのですが、

Columns(1).NumberFormatLocal = "#_ "

とかではダメなのですか?


ゼロでない時だけ処理するとかも有りですけど・・・

If Val(s) <> 0 Then
  file2.Worksheets("sheet").Range("A" & i) = Val(s)
End If

【64488】Re:セルの書式変更(文字列⇒数値)
質問  vba初心者  - 10/2/15(月) 13:22 -

引用なし
パスワード
   >名無しさん

ご返答ありがとうございます。
説明がへたくそですみません。

両方のパターンで以下のようにして試してみました。

1.Columns(1).NumberFormatLocal = "#_ "のパターン

Private Sub changeNumber()

  Dim i As Long
  Dim s As Range
  Set file2 = Workbooks("AAA.xls")

  For i = 1 To file2.Worksheets("sheet").Range("A65536").End(xlUp).Row  'A列全てを検索対象とする   
    file2.Worksheets("sheet").Range("A" & i).NumberFormatLocal = "#_ "
  Next i

End Sub


2.ゼロでないときだけ処理するパターン
Private Sub changeNumber()

  Dim i As Long
  Dim s As Range
  Set file2 = Workbooks("AAA.xls")

  For i = 1 To file2.Worksheets("sheet").Range("A65536").End(xlUp).Row  'A列全てを検索対象とする
       Set s = file2.Worksheets("sheet").Range("A" & i)
       file2.Worksheets("sheet").Range("A" & i) = Val(s)
  Next i

End Sub

1.の場合は、文字列の書式のセルは数値には変わりませんでした。
2.の場合は、文字列の書式のセルは数値に変わったのですが、やはりセル「A1」が「0」に書き換わっています。


少し補足させていただきます。
やりたいこととしては、左上に緑色の三角でエラーが出ているセルの
エラー内容が「数値が文字列として保存されています」となっているので
書式を数値にするVBAを作成したいです。

以上、よろしくお願いいたします。

【64489】Re:セルの書式変更(文字列⇒数値)
発言  SS  - 10/2/15(月) 14:25 -

引用なし
パスワード
   ▼vba初心者 さん:
横から失礼致します。
私の読み落しかも知れませんが肝心なことが書かれていないような?
「0」に書き換わるセル「A1」には何が入っているのでしょうか。
例えば数値に置き換わらない文字列「ABC」等は「0」になりました。
これが分かれば解決の糸口になるのではないでしょうか。

>>名無しさん
>
>ご返答ありがとうございます。
>説明がへたくそですみません。
>
>両方のパターンで以下のようにして試してみました。
>
>1.Columns(1).NumberFormatLocal = "#_ "のパターン
>
>Private Sub changeNumber()
>
>  Dim i As Long
>  Dim s As Range
>  Set file2 = Workbooks("AAA.xls")
>
>  For i = 1 To file2.Worksheets("sheet").Range("A65536").End(xlUp).Row  'A列全てを検索対象とする   
>    file2.Worksheets("sheet").Range("A" & i).NumberFormatLocal = "#_ "
>  Next i
>
>End Sub
>
>
>2.ゼロでないときだけ処理するパターン
> Private Sub changeNumber()
>
>  Dim i As Long
>  Dim s As Range
>  Set file2 = Workbooks("AAA.xls")
>
>  For i = 1 To file2.Worksheets("sheet").Range("A65536").End(xlUp).Row  'A列全てを検索対象とする
>       Set s = file2.Worksheets("sheet").Range("A" & i)
>       file2.Worksheets("sheet").Range("A" & i) = Val(s)
>  Next i
>
>End Sub
>
>1.の場合は、文字列の書式のセルは数値には変わりませんでした。
>2.の場合は、文字列の書式のセルは数値に変わったのですが、やはりセル「A1」が「0」に書き換わっています。
>
>
>少し補足させていただきます。
>やりたいこととしては、左上に緑色の三角でエラーが出ているセルの
>エラー内容が「数値が文字列として保存されています」となっているので
>書式を数値にするVBAを作成したいです。
>
>以上、よろしくお願いいたします。

【64491】Re:セルの書式変更(文字列⇒数値)
発言  vba初心者  - 10/2/15(月) 14:39 -

引用なし
パスワード
   ▼SS さん:
セル「A1」にはその列に入っているカラム名といいますか、
例えばセル「A1」に「出席番号」と記述しており
でセル「A2」から下に(出席)番号が「1、2、3・・・」
と振られているような感じです。

すみません、ちょうど良い言葉が思い浮かびませんでした。。。


セル「A1」の書式設定は標準になっています。

【64494】Re:セルの書式変更(文字列⇒数値)
発言  SS  - 10/2/15(月) 15:29 -

引用なし
パスワード
   ▼vba初心者 さん:

こんにちは、根本的な解決方法ではないのですが
「A1」に「出席番号」が記述されているのであれば
書換えが必要になるのは「A2」以降でしょうから
For文を2から回してはいかがでしょうか?
尚途中に数字以外の文字列があるようでしたら
この方法は使えませんね。
  For i = 2 To file2.Worksheets("sheet").Range("A65536").End(xlUp).Row  'A列全てを検索対象とする
       Set s = file2.Worksheets("sheet").Range("A" & i)
       file2.Worksheets("sheet").Range("A" & i) = Val(s)
  Next i

>▼SS さん:
>セル「A1」にはその列に入っているカラム名といいますか、
>例えばセル「A1」に「出席番号」と記述しており
>でセル「A2」から下に(出席)番号が「1、2、3・・・」
>と振られているような感じです。
>
>すみません、ちょうど良い言葉が思い浮かびませんでした。。。
>
>
>セル「A1」の書式設定は標準になっています。

【64497】Re:セルの書式変更(文字列⇒数値)
回答  名無し  - 10/2/15(月) 16:12 -

引用なし
パスワード
   ちょっとコードの直し方が違うんですけど・・・


Private Sub changeNumber()
  Dim file2 As Workbook
  Set file2 = Workbooks("AAA.xls")
  With file2.Worksheets("sheet")
    With .Range("A1", .Range("A65536").End(xlUp))
      .NumberFormatLocal = "#_ "
      .Value = .Value
    End With
  End With
End Sub

ではダメですか?

【64498】Re:セルの書式変更(文字列⇒数値)
発言  Jaka  - 10/2/15(月) 16:29 -

引用なし
パスワード
   ニーズにあってるか判らないけど。

表示形式を標準にしてから、
列(1列)を選択して、データ → 区切り位置 、そのまま完了。
を試してみてください。

【64505】Re:セルの書式変更(文字列⇒数値)
お礼  vba初心者  - 10/2/16(火) 10:33 -

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

ありがとうございます!
出来ました!

文字列にたいして「0」に変換されてしまったんですねー。
よく考えれば、そりゃそうですよね。

途中に文字列が出てこないことを願いつつ、活用させていただきます!

【64506】Re:セルの書式変更(文字列⇒数値)
お礼  vba初心者  - 10/2/16(火) 10:34 -

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

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

区切り位置??。。。少し調べてやってみたいと思います!

また、分からないことが出てきたら質問させていただきます。
ありがとうございます☆

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