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



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

そこで、

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

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

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

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/06/24 11:56:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント250pt

以下のコードを標準モジュールに貼り付けて、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
id:oshietekudasai19

ありがとうございます!いつもながら、完璧なご対応で感謝します。わかりやすいのも初心者にありがたいです。

2016/06/24 11:56:08

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません