Excelで文字列になっているセル(例:'1)を数値(例:1)に変換したいと思います。

次の全ての条件を満たして行う方法を教えてください。
ご不明な点は回答ではなくコメントにご質問ください。

1)マクロで行う
2)対象の列は複数
3)対象の行は毎回変動
4)元(例:'1)の罫線等他の書式は変更しない

大変申し訳ないのですが、あまりに抽象的な回答・私が理解できなかった回答にはポイントをお支払できませんのでご了承ください。

回答の条件
  • 1人2回まで
  • 登録:2007/08/20 09:40:16
  • 終了:2007/08/21 16:05:14

回答(1件)

id:yamabukian No.1

yamabukian回答回数5ベストアンサー獲得回数12007/08/20 16:08:10

ポイント60pt

次の方法ではどうでしょうか?

1セル内に格納されたカンマやタブで区切られたデータを、右方向のセルに展開する場合に使うコマンドです。

1.対象の1列を選択。

2.[データ]メニューの[区切り位置]をポイント。

3.[データ区切り位置指定ウィザード1/3]ウィンドウで即[完了]。

1度に1列しか処理できませんがループ処理でもOKなら条件2もクリアできるでしょう。マクロで使う場合はSelection.TextToColumnsメソッドです。

この方法をご存知なければご確認の上ご検討下さい。もしご存知でしたら失礼。

id:Twill

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

データ量が多いのとマシンスペックも非力のためかやってみましたが毎回列挿入>列区切>列削除を行うのはちょっと重過ぎました。

2007/08/21 16:04:22
  • id:Mook
    回答権が無いのでご参考までに。

    選択したセルの ' をはずす処理です。
    (インデントが全角スペースになっているので半角に置換してお試しください。)

    Sub sample()
      Dim objRange As Range
      For Each objRange In Selection
        objRange.Value = objRange.Value
      Next
    End Sub
  • id:taknt
    質問が 抽象的ですねぇ。

    >2)対象の列は複数
    >3)対象の行は毎回変動

    ここらへんが。
  • id:Twill
    >質問が 抽象的ですねぇ。
    大変申し訳ありません。修正します。

    2)対象の列は、D列とE列とR列とT列です。
    3)対象の行は毎回変動します。
      前段のマクロでデータ抽出を行うため対象の件数は未定です。
      10行の場合もあるし50000行の場合もあります。
      この数だけは指定できません。

    一番ネックは3)です。
    列全体に1を乗算してみましたが、空白セルが0で埋め尽くされてしまいました。
    この事象を回避できる方法を教えてください。
  • id:taknt
    >列全体に1を乗算してみましたが、空白セルが0で埋め尽くされてしまいました。
    この事象を回避できる方法を教えてください。

    objRange.Value = objRange.Value

    この部分を

    if objRange.Value<>"" then
    objRange.Value = objRange.Value
    end if

    にすればOKかな。
  • id:Twill
    大変申し訳ありません。

    2)に記載しているとおり、対象の列が決まっているので、対象外の列は変換されないような方法を教えてください。

    2)対象の列は、D列とE列とR列とT列です。
      A列やB列は同じ数字の文字列ですが文字列のままでお願いします。
  • id:taknt
    と書いたけど、0にならないよ?

    あと VBって 全角は 半角に勝手に変換されるんだよね。
    "" 内は 変換されないけど。
  • id:Twill
    >と書いたけど、0にならないよ?
    とありますが、私はMookさんのマクロではなく、自分で作ったマクロの結果『>列全体に1を乗算してみましたが、空白セルが0で埋め尽くされてしまいました。』ということでした。

    Mookさんのマクロは列指定ができない感じですが、なんか方法ありますでしょうか。

    どうやっても難しいのでしょうか・・・。
  • id:taknt
    >2)対象の列は、D列とE列とR列とT列です。
      A列やB列は同じ数字の文字列ですが文字列のままでお願いします。

    objRange.Value = objRange.Value

    この部分を

    If objRange.Column = 4 Or objRange.Column = 5 Or objRange.Column = 18 Or objRange.Column = 19 Then
    objRange.Value = objRange.Value
    End If

    objRange.Columnの4がD列、5がE列、18がR列、19がT列です。
    そのときだけ 処理するようになります。

  • id:taknt
    >Mookさんのマクロは列指定ができない感じですが、なんか方法ありますでしょうか。


    Mookさんのマクロは、選択した範囲だけ実行するようになっているから
    D列とE列を選択して実行
    R列とT列を選択して実行
    の二回実行すればいいだけ。

  • id:garyo
    こんな感じ?
    Sub sample()
      For y = 1 To 65535
        If Cells(y, 4) <> "" Then
          Cells(y, 4) = Cells(y, 4)
          Cells(y, 5) = Cells(y, 5)
          Cells(y, 18) = Cells(y, 18)
          Cells(y, 19) = Cells(y, 19)
        Else
          Exit For
        End If
      Next
    End Sub
  • id:Mook
    投げっぱなしでしたが、他の方々がフォローしてくださったみたいですね。ありがとうございます。


    列が変わるというのが、任意の列ではなく対象シートの最終列であるという解釈なら、下記でできると思います。

    Sub sample3()
      Dim lastLine As Long
      lastLine = Range("D" & Rows.Count).End(xlUp).Row
      
      Dim i As Long
      Dim objCol As Variant
      For Each objCol In Array("D", "E", "R", "T")
        For i = 1 To lastLine
          Cells(i, objCol).Value = Cells(i, objCol).Value
        Next
      Next
    End Sub
  • id:Twill
    みなさま、ありがとうございました。
    おかげさまで実現させたかったマクロは作成できました!
    非常に助かりました。(1分1秒が貴重な状況だったので・・・)

    Mookさんへ
    ありがとうございました。私が実現させたかったマクロになりました。
    とくに最後はイメージが伝わって大変嬉しく思います。
    ありがとうございます。前回同様、後ほどポイントお送りします。

    takntさんへ
    いろいろとありがとうございました。
    おかげさまで欲しいものができました。
    後ほどポイントお送りします。

    garyoさんへ
    新しい目線での回答ありがとうございました。
    今回は別方法を採用しましたが、こういうやり方もあるんだと勉強になりました。
    ありがとうございました。後ほどポイントお送りします。
  • id:Mook
    ポイントありがとうございました。

    お役に立てたようで何よりです。
  • id:kaiton
    もう解決されていますが、マクロ以外では以下の方法で対応していますので、参考まで...
    どこか適当なセルに数字の 1 を入力し そのセルをコピー
    数字が文字列になっているセルを選択し([編集]の[ジャンプ]の[セル選択]で「定数」の「文字」にチェックをすると楽)
    [編集]→[形式を選択して貼り付け]で「値」と「乗算」にチェックで[OK]

    「値」にチェックを入れるのは罫線等の書式を維持するためです。
    エクセル2003で確認しています。
  • id:Twill
    kaitonさん
    回答ありがとうございます。
    コメントTwill 2007-08-20 09:55:47で空白が0になってしまう件の解決方法ということですね。1つ勉強になしました。
    今回は条件にマクロであることを記載させていただいておりますのでポイントはご了承ください(^^ゞ
  • id:kaiton
    後々、ここを見られる方のためのコメントですので..ポイントはお気遣い無く
    ただ、気付いてくれるかな?? (^^;)

    なお、ジャンプのセル選択をすると、マクロでセルをなめるように処理するより早くなることが多いです。(非力なPCでは特に)
    これをキー記録してみるとわかると思います。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません