• ベストアンサー

Excel VBAについて教えて下さい。

VBAについて2点ほど質問があります。 (1)複数セル(例:A2:A40)に入力されている文字列を一括で数値に変換するVBAはありますか? (2)複数セル(例:A2:A40)に日付と時間が入力されていて(例:2019/09/12 16:00)、それを一括で日付と時間それぞれ別々のセルへ表示させるVBAはありますか? 現状、1つのセルしか変換できず複数一度には難しいのでしょうか? お分かりの方いましたら、是非ご教示お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (704/1454)
回答No.4

一括でということは、ループを使わすということでしょうか。 (1) 数字が文字列形式で入っているのを数字形式に直すと解釈します。 例 '1 → 1 表示形式は文字列以外になっているとします。 ' Sub Macro1() '   [A2:A40] = [A2:A40].Value End Sub a→1 b→2 のような変換は、一度には無理です。 (2) 直接値を入れたい場合、ループを使うしかありません。 以下は、数式を入力した後、値に変換しています。 ' Sub Macro2() '   [B2:B40] = "=INT(A2)"   [B2:B40].NumberFormatLocal = "YYYY/MM/DD"   [C2:C40] = "=A2-B2"   [C2:C40].NumberFormatLocal = "h:mm"   [B2:C40] = [B2:C40].Value End Sub

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

VBAは決まったツールでネットや本から持ってくるものではないと考えるべきです。 手作業で行うのが大変な時にVBAを使って作業を効率化したり、正確性を高めます。自分で作るものです。 質問のケースは、1つのセルの処理ができれば、後は、 <1>繰り返しの使い方  For~Next、For Each~Next、While~Wend、Do~Loop など色々あるのでどのような時使うべきかを勉強すべきでしょう。 <2>セルの操作  Excelではセルの操作が大事です。  Range、Cells、Offset、文字列として表現、RC表現 などたくさんあります。ループ処理に関係して、セルをどのように表現すべきか勉強すべきでしよう。 <3>VBAを勉強するのに一番いいのは、オブジェクトブラウザを見ることでしょうか。オブジェクトブラウザの操作法とかはネットで調べてください。 <4>  質問(1)については、「男→1、女→3」に変更する処理をFor~Nextで書いています。文字列を使ってセルを表現しています。  質問(2)については、For Each ~Next を使い、結果をとなりの2つのセルに書いています。Offsetを使っています。 '// (1)文字列を数値にする Sub 文字列を数値に()  Dim r As Integer '// 行カウンタ  Dim dt As String '// データ    For r = 2 To 40   dt = Range("A" & r).Value   Select Case dt    Case "男"     Range("B" & r).Value = 1    Case "女"     Range("B" & r).Value = 3    Case Else       End Select  Next End Sub '// (2)日付と時刻を分解する Sub 日付と時刻を分解()  Dim rng As Range    For Each rng In Range("A2:A40")   rng.Offset(0, 1) = Format(rng.Value, "yyyy/mm/dd") '// B列   rng.Offset(0, 2) = Format(rng.Value, "hh/mm") '// C列  Next End Sub

  • 3620313
  • ベストアンサー率33% (4/12)
回答No.2

(1)置換で対応 何の文字を何の数字に変換するのかが不明なので、 a→1 b→2 c→3 d→4 e→5 と置換する場合で想定 Range("A2:A40").Select Selection.Replace What:="a", Replacement:="1", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="b", Replacement:="2", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="c", Replacement:="3", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="d", Replacement:="4", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="e", Replacement:="5", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False (2) Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row) = "=TEXT(RC[-1],""yyyy/mm/dd"")" Range("C2:C" & Range("A" & Rows.Count).End(xlUp).Row) = "=TEXT(RC[-2],""hh:mm"")" って感じかと。

  • kkkkkm
  • ベストアンサー率65% (1579/2414)
回答No.1

両方ともありません。 A2からA40までループして処理してください。

関連するQ&A

  • ExcelのVBAについて。

    ExcelのVBAについて。 画像のようなコードを利用してセルに入力時の日付時間を自動的に付加させたいのですが、、 VBA初心者な為に上手くいきません。 コード自体はサイトのを切り貼りして使えるのですが、これ以上の応用例に行き着けません。目的としては、データベース的に、あと入力数値から特定文字を抜き出して変数を当て嵌め文字列の語呂を当てます。様式はまだ作成中ですが、ある種の図表化してプリントアウトまでしたいと思っています。 何が上手くいかないか、まず自動的に付加させる所は何となく出来ているので、これをシート1とした場合に、シート2に図表化した転記内容を構成し、、シート1入力、シート2表示、またシート1A3セルに戻るというコードにしたいです。 この記述は不味いとかこうこうああした方が良いというアドバイスや指摘をお願いします。 よろしくお願いします。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

  • エクセル VBAで入力

     エクセル初心者です。 条件付き書式で一つのセルに特定の文字列を入力した際に、そのセルと任意の法則性のある複数のセルに(入力内容は無関係でセルの行・列に法則性があります)特定の塗りつぶしを行いたいのですが、どのようにすればよいのでしょうか。 条件付き書式をすべて設定する(手打ち)するのが最も確実で間違いの内方法ではありますが、新規に行・列を挿入した場合、その行・列には条件付き書式が設定されていませんので、意図した作用を起こさなくなってしまいます。 上記ではよくわからないと思いますので、具体的な例を入れさせていただきます。 例)) 任意のセル(A13)に特定の文字列(OK)と入力する。 特定文字列に反応して、そのセルの列に(A12からE12、F12からH12)赤色の塗りつぶしを入れる。 上記は1セルに対して行われますが、VBAを使用してA12からA5000までを検索対象として持たせて、それぞれのセルの列に対して塗りつぶしを入れられるようにしたいと思っています。

  • エクセルのVBAについて質問です。

    エクセル2003のVBAについて質問です。 複数の検索したい文字列があり、複数の検索対象セルがあります。 セルの文字列が検索文字列のいずれかと一致したセルの背景の色を変えたいです。 よろしくおねがいします。 仕事でマクロを組まなけばならなくなってしまったのですが、 初心者のため検索してみたり調べてみたり、参考にして作ってみたのですがうまくいかないばかりかどんどん解らなくなってしまいました。 どうか助けてください。 sheet1のセルが検索対象 (全セル対象でも大丈夫ですが、検索したいセルはB2→J2、B11→J11、B20→J20の範囲です)、 sheet2のA列に検索したい文字列が入力されています。 この検索したい文字列は今後増えていく可能性があるので、増えた場合にも対応できるようにと考えています。 sheet1(検索対象) あ い う え あ お お sheet2(検索文字列) あ う お け き ↑の様に入力されており、sheet1の「あ」と「う」と「お」のセルの背景を変えたいです。 色を変えたいのはsheet1です。 findメソッドや繰り返し処理などを調べて実践してみたのですが、 いきなりマクロを組めといわれた超初心者には難しく質問しています。 自分でやってみたのですが、 sheet1の最初の「あ」のみが変換され、後に出てくる「あ」が変換されません… どうしたらいいのか…どうすることも出来ず困っております。 すみませんが、どなたか優しい方助けてください。 よろしくおねがいします><

  • エクセルについて

    どなたかご教示ください。 エクセルで、ある一つのセルに一定の文字列や数値が入力されたら、 それによって、違う列にある、ある一つのセルから横や盾方向に指定した数のセル数まで、一定の文字列や数値が入力される様に、なんて出来ますでしょうか? 小生、関数やVBAなるもの、よくわからないもので申し訳ありませんがよろしくお願いいたします。

  • エクセルVBAで特定の範囲を検索したい

    VBAを使って、A1セルに入力した数値をA列から検索して、そのセルをアクティブにしたいのですが、検索範囲のA列を特定するにはどのようなコードが必要でしょうか?現状ではシート全体を検索してしまいます。 超初心者です。よろしくお願いします。

  • エクセルVBA記述方法についての質問です。

    初心者です。色々調べるとVBAを使わないと下記の処理はできないみたいで・・・ わかる方がいれば是非教えて頂きたいです。 今回、毎日入力している数値に対して作業日付(更新日時)を残したいのですが、 例えば、A列のセルに数値を入力すると、入力したセルの右側のセル(この場合B列)に 日付と時間が残るようにしたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("a1") Then Target.Cells(1, 2).Value = Now() End If End Sub 自分でも色々調べてやってみましたが、上記の記述だと、A1に入力すればB1に作業日時が残ります。 やりたいことはこれに限りなく近いのですが、対象入力範囲をA列にしたいです。 A列のどのセルに数値を入力しても、入力したセルの右側(B列)に作業日時を残していきたいです。 どのように記述すれば良いのかわからないので是非アドバイスを下さい。 よろしくお願い致します。

  • Excel VBA セル内の文字列操作について

    例えば、A列(A2より下のセル)のセル内にある文字列が、それぞれ対応するB列(B2より下のセル)のセル内にあった場合、該当文字列のフォントの色を変えたい(例えば「赤」)のですが、VBAで一括処理とかできるのでしょうか? <例> A列      B列 テスト     このテストは・・・ → 「テスト」の部分のみ赤色にしたい。 サンプル   サンプル     → 文字列全部分の「サンプル」を赤色にしたい。 どうかご教示の程よろしくお願いいたします。

  • エクセルVBAのReplaceメソッドについて

    エクセル表内のある文字列をVBAのReplaceメソッドを使用して、別の文字列に一括変換したいと考えてます。引数で指定する『置換後の文字列』として該当セルの一つ上のセル(A2に対象文字列がある場合は、A1の値)を指定したいのですが、どのように指定したらよいのか分かりません。Replaceメソッドで置換後の文字列として一つ上のセルの値を指定する事は可能でしょうか。宜しくお願いします。

  • エクセルVBAで

    エクセルのVBAでA列に平仮名全角で文字が入力されているデータをB列にローマ字に変換して入力するようにするということは可能でしょうか? 宜しくお願いします。

専門家に質問してみよう