人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【エクセルVBA】9.07E+09 などとでる値のエクセルに0を追加し、文字列としたい。


顧客リストがあるのですが、電話の列が0が抜けて、かつ上のようにきちんとした数字では
なくなって表示されてしまいます。

そこで、

1行目に、「電話」とある列を探し出し、その2行目から下に向かって以下のマクロを走らせていただきたいのです。

・先頭に、0がないときは、0を1つだけ足す。
・0の値になっているときには、00-0000-0000とする
・何も入っていない行が2つ続いた時に動作を停止する。
・電話の列すべてを文字列での書式で登録する。(現在は、標準になっているようです)

以上をお願いいたします。
(直接の回答以外、関数でできるとのご回答等にはポイントを差し上げられませんので、
ご注意くださいませ。)


●質問者: oshietekudasai19
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●250ポイント ベストアンサー

以下のコードを標準モジュールに貼り付けて、adjust_telno サブルーチンを実行してください。

Function is_blank_cell(c)
 is_blank_cell = IsEmpty(c) Or c.Value = ""
End Function

Sub adjust_telno()
  ' 「電話」列を探す
 telno_col = -1
 last_col = Cells(1, Columns.Count).End(xlToLeft).Column
 For c = 1 To last_col
 If Cells(1, c).Value = "電話" Then
 telno_col = c
 Exit For
 End If
 Next

 If telno_col = -1 Then
 MsgBox "「電話」列がありません"
 Exit Sub
 End If

  ' 書式を文字列にする
 Cells(1, telno_col).EntireColumn.NumberFormatLocal = "@"

  ' 一応、最後に値が入っている行を
 last_row = Cells(Rows.Count, telno_col).End(xlUp).Row

  ' 電話番号を処理
 For r = 2 To last_row
 If Not is_blank_cell(Cells(r, telno_col)) Then
 v = Cells(r, telno_col).Value
 If v = 0 Then
 Cells(r, telno_col).Value = "00-0000-0000"
 ElseIf Left(v, 1) <> "0" Then
 Cells(r, telno_col).Value = "0" & v
 End If
 Else
  ' 空白セルがふたつ続いたら処理を止める
 If is_blank_cell(Cells(r + 1, telno_col)) Then
 Exit For
 End If
 End If
 Next
 
End Sub

oshietekudasai19さんのコメント
ありがとうございます!いつもながら、完璧なご対応で感謝します。わかりやすいのも初心者にありがたいです。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ