初めまして。
以下のようなマクロが欲しいのですが、知識不足のため、どうしたらよのかわからず困っております。
ウェブで色々と調べてやってみましたが、期待どおりの結果を得られませんでした。
どなたかお教えいただけたら幸いです。
行いたいのは、例えば、
セルA1に文字列『1. abc』が入っているとき、先頭の番号『1』の部分だけ取り出し
(または . 以下を除いて)、セルA1の内容を数字型の『1』に書き換える
という動作です。
複数のセルをドラッグして選択し、マクロのショートカットで一発変換
できたら…と思っております。
変換したい部分のセルの内容はすべて、『1. abc』のように、文字列で
「1~7の数字」、「半角の.」、「半角スペース」、「英単語」
の順になっています。
簡単なことなのかもしれませんが、自分にはさっぱりでした…
どなたか回答をお願いいたします。m(_ _)m
No.6
- 回答日時:
こんばんは。
#4の回答者です。
>提示していただいたコードでテストしたときは、特にエラーなどなく動作しましたが、あまり推奨されない書き方だということなのでしょうか。
それは、ご質問の精度が、どのぐらいまで求められているか分からないからです。
>変換したい部分のセルの内容はすべて、『1. abc』のように、文字列で
>「1~7の数字」、「半角の.」、「半角スペース」、「英単語」
>の順になっています。
という条件には、私の書いた内容には、多少の食い違いがあるということです。
例えば、1. abcdあ(英単語ではない), 1.abc(コンマが全角), 8. aab(最初が、8で、スペースが全角)という条件は、除外例として挙げられたりしたら、もう、私のマクロでは、そのままでは間違いですね。「1~7の数字」、「半角の.」、「半角スペース」、「英単語」 この条件のどれかが、該当していない場合は、変換をしないと考えたら、そんなに簡単ではありません。
単に、数字だけを取り出すなら、Val 関数を使えばよいものの、消しては困るものがあったら、大変なのです。私は、あくまでも、忠実に質問に答えようとするのですが、そう思うことで、空回りも往々にしてあるということなのです。
>簡単なことなのかもしれませんが、自分にはさっぱりでした…
そして、簡単と思えることが、時には、非常に難しい問題が含まれていたりします。そこで、私自身、手抜きをしたりして、後々に、別のところで読みを間違って、ミスを出すことも、またあるということなのです。
No.5
- 回答日時:
こんにちは。
ちょっと気になったので、遅れ馳せながら
コードだけですが。
For Each rngX in Selection
rngX.Value=Val(rngX.Value)
Next
とかで、どうですか?
却って入力ミスにも対応し易いんじゃないかな?
他にも色々あるだろうけど、
「For Each ~ Next」ループや
「文字列から先頭の数値を返す」Val()関数などは、
重要な基本だと思うので。
一応、条件として以下。
・セル範囲を選択中であること
・セルの書式が標準であること
こんにちわ^^
回答ありがとうございます。
貴重なご意見ありがとうございました。
今回の質問内容は急に言われた仕事でのことでして、Excelのマクロは使ったことがないし、
VBの知識もないという初心者状態でしたので、このようなアドバイスは本当にありがたいです。
cj_mover様のご意見考慮しながら、良いコードの書き方を勉強していきたいと思います。
ありがとうございました^^
No.4ベストアンサー
- 回答日時:
こんばんは。
練習レベルだとしたら、
For Each c in Selection
c.Value =Left$(c.Value,1)
Next
という方法が一番よいのかな。
>変換したい部分のセルの内容はすべて、『1. abc』のように、文字列で
>「1~7の数字」、「半角の.」、「半角スペース」、「英単語」
>の順になっています。
"[1-7]. [A-z][A-z][A-z]*"
とすれば、ある程度表現してみるかもしれませんが、厳密には、この方法ではだめですね。Like 演算子には、それほどの表現力がありませんから、"abc" の次の文字の制限がありません。VBAだけの範囲では、それを確保できません。正規表現の力が必要です。
>簡単なことなのかもしれませんが、自分にはさっぱりでした…
VBAだけの範囲では、ご質問自体は、かなり難しいですね。ただ、今回、この質問には関係ないけれども、難しい方法は、別の質問者さんのように無視されても叶わないでから、とりあえず、その先はやめておきます。(立て続けに二度されると、さすがに同様の質問は、めげますね。)
ショートカットの登録の方法などは、割愛しておきます。
'------------------------------------
'標準モジュールが良いです。
Sub Test1()
Dim c As Variant
For Each c In Selection
If c.Value Like "[1-7]. [A-z][A-z][A-z]*" Then
c.Value = Val(c.Value)
End If
Next c
End Sub
こんばんは^^
回答ありがとうございます。
なんともご丁寧に回答していただきまして、大変勉強になりました。
提示していただいたコードでテストしたときは、特にエラーなどなく動作
しましたが、あまり推奨されない書き方だということなのでしょうか。
皆様のご意見を参考にしつつ、勉強していきたいと思います。
ありがとうございました。
No.2
- 回答日時:
なぜマクロが必要なのでしょう。
=VALUE(LEFT(A1,1)
で別のセルに変換すれば済む話だと思います。
マクロならとりあえずこんな感じでしょう。結合セルは考慮していません。
Sub Macro3()
Dim r As Range, ptr As Integer
If TypeName(Selection) = "Range" Then
For Each r In Selection
ptr = InStr(r.Value, ".")
If ptr > 0 Then
If IsNumeric(Left(r.Value, ptr - 1)) Then
r.Value = Val(Left(r.Value, ptr - 1))
End If
End If
Next r
End If
回答ありがとうございます^^
お礼が遅くなってしまってすみません。
おっしゃる通り、
=VALUE(LEFT(A1,1)
を用いて変換すればよい話でもあるのですが、今回はアンケート結果の分析を
行おうとしていまして;;
何十項目あるアンケート数百件の結果がいくつかのファイルに分かれており、
今後も同様の作業を数回行う可能性があるなぁ…と思ったので、そのつど
上記式を用いるよりもマクロ作っちゃったほうが効率いいかなっと考えた
次第です > <
ご丁寧にありがとうございます。
zap35様のコードで思い通りの変換をすることができました。
本当にありがとうございました。
No.1
- 回答日時:
Sub test()
Dim c As Range
For Each c In Selection
c.Value = Left(c, 1)
Next
End Sub
急いでいるようなので回答しますが、私はあまり詳しくないので違ったらすみません。
お早い回答ありがとうございます^^
お礼が遅くなりすいませんでした。
fred2000様のコードで、期待通りの変換を行うことができました。
この短いコードがどうなっているのか…今の私にはさっぱりですが、
大変すばらしいと思います。
ありがとうございました。助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
エクセル マクロ チェックボックス
-
現在のセルの位置を返す関数は...
-
フォントの色を指定して削除出...
-
Excel2007 色のカウント (VBA)
-
マクロを実行すると画像がズレ...
-
未記入がある場合はマクロを実...
-
Excelで、図形内の文字をセルに...
-
VBA 見つからなかった時の処理
-
アポストロフィーの一括挿入 ...
-
ページ内ハイパーリンクの表示...
-
空白セルを空セルに置き換える...
-
クリックすると文章が表示され...
-
セル背景や文字を点滅させる方法
-
Excelのパスが格納されている列...
-
エクセル シート保護された共...
-
エクセルのセル内の行の並び替...
-
エクセル マクロ 相対パスか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
VBA 見つからなかった時の処理
-
エクセルでの検索ボックスの作...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
【EXCEL】先週の月曜日の日付を...
-
EXCELのセルや文字色の反映
-
セルがクリックされた回数をカ...
おすすめ情報