• ベストアンサー
  • 困ってます

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

  • 質問No.9656077
  • 閲覧数84
  • ありがとう数4
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 0% (0/4)

VBAについて2点ほど質問があります。

(1)複数セル(例:A2:A40)に入力されている文字列を一括で数値に変換するVBAはありますか?

(2)複数セル(例:A2:A40)に日付と時間が入力されていて(例:2019/09/12 16:00)、それを一括で日付と時間それぞれ別々のセルへ表示させるVBAはありますか?

現状、1つのセルしか変換できず複数一度には難しいのでしょうか?

お分かりの方いましたら、是非ご教示お願い致します。

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

  • 回答No.4
  • ベストアンサー

ベストアンサー率 48% (208/429)

Excel(エクセル) カテゴリマスター
一括でということは、ループを使わすということでしょうか。

(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件)

  • 回答No.3

ベストアンサー率 67% (796/1172)

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
  • 回答No.2

ベストアンサー率 33% (2/6)

(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"")"

って感じかと。
  • 回答No.1

ベストアンサー率 53% (547/1024)

Excel(エクセル) カテゴリマスター
両方ともありません。
A2からA40までループして処理してください。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ