- ベストアンサー
Excel VBAについて教えて下さい。
VBAについて2点ほど質問があります。 (1)複数セル(例:A2:A40)に入力されている文字列を一括で数値に変換するVBAはありますか? (2)複数セル(例:A2:A40)に日付と時間が入力されていて(例:2019/09/12 16:00)、それを一括で日付と時間それぞれ別々のセルへ表示させるVBAはありますか? 現状、1つのセルしか変換できず複数一度には難しいのでしょうか? お分かりの方いましたら、是非ご教示お願い致します。
- みんなの回答 (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)
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)
(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
- ベストアンサー率66% (1719/2589)
両方ともありません。 A2からA40までループして処理してください。