• 締切済み

Excel VBA 日付フォーマットを統一したい

Excel VBAについてお教え下さい。Excel2010を使用しています。 A列に下記のようなデータが入っています。 20141130 20141201 B列に下記のようなデータが入っています。 2014/11/30 2014/12/01 C列にA列の値を変換して表示したいと思っています。 20141130 ⇒ 2014/11/30 20141201 ⇒ 2014/12/01 D列にB列の値を変換して表示したいと思っています。 2014/11/30 ⇒ 20141130 2014/12/01 ⇒ 20141201 下記のようなコードを書いてC列を埋めようと思いました。エラーメッセージが出て、オーバーフローしましたというメッセージでした。 For i To 100 Format(ThisWorkbook.Worksheets("データ").Cells(i, 3).Value, "yyyymmdd") Next i さらに、D列を埋めようと下記のコードを書きました。 Format(ThisWorkbook.Worksheets("データ").Range("D" & i).Value, "@@@@/@@/@@") そうしたら、2014/12/1 といったように、桁数が足りなく、「01」となりません。 質問 やりたい事はA列、B列をどちらかのフォーマットで統一したいと思っています。 どのようなコードを書けば問題は解決されるでしょうか? よろしくお願い致します。

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

Excelで日付を扱うなら、日付のシリアル値で統一した方が良いです。 そして表示フォーマットはセルの書式で合せます。 > Format(ThisWorkbook.Worksheets("データ").Range("D" & i).Value, "@@@@/@@/@@") > そうしたら、2014/12/1 といったように、桁数が足りなく、「01」となりません。 コードはあまり宜しくありませんが、これでD列に日付のシリアル値でデータが入りました。 #Excelは、日付と判別できる文字列を気を利かせて日付のシリアルとして扱います。 あとはセルの書式のユーザー定義で「yyyy/mm/dd」と設定してください。 VBAでやるなら↓です。 ThisWorkbook.Worksheets("データ").Range("D1:D100").NumberFormatLocal = "yyyy/mm/dd"

関連するQ&A

  • VBAのエラーについて

    いつも識者の皆様にはお世話になっております。 Excel VBAのことで質問させてください。 Range("i23").Value = Application.VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0) というコードは通るのですが、 Range("i23").Value = Application.Left(VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0), 2) というleft関数を追加したコードだと「sub または function が定義されていません」というエラーになってしまいます。 VBAを始めたばかりなのですが、何か根本的な勘違いをしていますでしょうか? ちなみに Range("i23").Value = Application.Left(Application.VLookup(ThisWorkbook.Worksheets("aaa").Range("b5"), ThisWorkbook.Worksheets("data").Range("a2:b7"), 2, 0), 2) というコードも通りませんでした。 ご回答よろしくお願いいたします。

  • Setステートメントをまとめて記述する方法 (エクセル2000VBA)

    お世話になります。 Setステートメントで以下のように書いて、シート名を省略して使っています。  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") これをプロシージャ毎に書くとコードが長くなるので、先頭かどこかに1回書くだけで、全てのプロシージャで使えるようにしたいのですがどうしたら良いでしょうか? このようなプロシージャを実行したいのですが、 Private Sub CommandButton1_Click()  a.Range("A2").Value = "データ1"  b.Range("B4").Value = "データ2"  c.Range("C9").Value = "データ3" End Sub (他にもコマンドボタンやチェックボックス用のプロシージャがあります) Setステートメントだけを先頭に書くと、 「プロシージャの外では無効です」というエラーが出ましたので、 Public Sub hensuu()  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") End Sub のようにしたら、「実行時エラー"424":オブジェクトが必要です」というエラーが出てしまいました。 どのようにしたらエラーが出ず正しく動くようになりますでしょうか?よろしくお願いします。

  • VBA SumIfについて教えてください。

    【やりたいこと】 A列が「犬」となっている行のB列数字を全て足してCの1行目に答えデータを入れる。   A   B  C   犬  200   猫  100   鳥  150   犬  130   犬  120   ・   ・   ・   ・   ・   ・   ・   ・ 上記の場合、A列が「犬」のB列数字200+130+120でC1には「450」と値が入る。 以下が書いてみたものですがエラーが出てしまいます。 何がいけないのでしょうか?ご教示頂ければ幸いです。 Sub monthResult() Dim ans As String 'ユーザフォームで「犬」という値を取得    i = 2    Do Until Worksheets("データ").Cells(i, 1).Value = ""       'データという名前のシートA列のデータが無くなるまで      Worksheets("データ").Cells(1, 3).Value =       Application.WorksheetFunction.SumIf(Cells(i, 1).Value, ans, Cells(i, 2).Value)       '↑ここでエラーになります。ans(犬)の値は取得出来ています。      i = i + 1    Loop End Sub

  • エクセル 別シートから値を検索して挿入 VBA

    いつもお世話になっております。 VBAにて、Sheet1 の【原価】に【商品】をキーにしてSheet2の【原価】を検索して挿入するコードを作成しました。 元々Shee1の【原価】にはすでに数値が入っていますが、下記のコードを実行すると上書きする処理のため、検索にヒットしない商品の【原価】はエラー【#N/A】となります。 ※画像参照願います。 目的はヒットする商品名の【原価】のみが更新される、 ヒットしない場合エラー【#N/A】を出さないようにする。 改良をご教示頂ければ助かります。 Sub データ検索() Application.ScreenUpdating = False Dim I As Long   I = 2 Do While Range("A" & I).Value <> ""  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = _   Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, Worksheets ("Sheet2").Range("A2:B65535"), 2, 0)  I = I + 1 Loop Application.ScreenUpdating = True End Sub

  • Excel VBAでの日付検索について

    Excel VBAでの日付検索について Excelに下記のように1時間おきの日時(A列)と値(B列)が数か月分入力されています。 UserFormで入力された月の、日別の合計した値を別ブックに出力したいと思っています。 A列の日時は、セルの書式設定でユーザ定義の「yyyy/m/d hh:mm」となっています。 例)UserFormで8月と入力されたら、8/1の0:00~23:00の値(B列)を合計し、別ブックへ出力し、それを月末(8/31)分まで繰り返し計算し出力したい。 A            B 2010/8/1 0:00       345.5 2010/8/1 1:00       309.4 2010/8/1 2:00       364.2 :       : :       : :       : 2010/8/1 23:00       359.0 2010/8/2 0:00       339.9 2010/8/2 1:00       357.3 現在、下記のようなVBAにして、UserFormで入力された月の1日のデータが入力されている行番号を取得 しようとしているのですが、うまく検索されません。 どなたかご教授下さい。 Dim Obj As Object Dim HitRow As Long Dim Cerday As Long Dim myDay As Date myDay=txt_年.Value & "/" & txt_月.Value & "/1" Cerday=DateValue(myDate) Set Obj=Worksheets("sheet1").Cells.Find(Cerday,LookAt:=xlwhole) If Obj Is Nothing Then MsgBox "見つかりません。" Else HitRow=Worksheets("sheet1").Cells.Find(Cerday,LookAt:=xlwhole).Row End If

  • excel vbaの関数の使い方

    excel VBAでsumproduct関数を使いたいがでますのですがどうしても実行できません 何が原因でしょうか、どなたか教えてください。 ------------------------------------------------- 下記コードは実行できます。 Worksheets("集計").Range("j4").Value = WorksheetFunction.Sum(Worksheets("日常").Range("h4:h13")) 下記コードは型が違うとのコメントがでます。 Worksheets("集計").Range("j4").Value = WorksheetFunction.SumProduct((Worksheets("日常").Range("c4:c13") >= j2) * Worksheets("日常").Range("c4:c13") <= k2) * Worksheets("日常").Range("d4:d13") = l2 * Worksheets("日常").Range("f4:f13") = m2 * Worksheets("日常").Range("h4:h13") --------------------------------------------------------------------- ワークシートは、日常、集計、の二つがあります。 「日常」には、C4:H13にデータがあります。 c列に年月日、d列にコード番号、e列に購入箇所、f列にコード番号、g列に商品、h列に金額 が入力されています。 「集計」には、j2に開始日、k2に終了日、l2にd列のコード番号、m2にf列のコード番号、 が入力されています。 環境は、windows10 使用しています。 ----------------------------------------------------------- 以上の状況ですがvba でsumproduct関数を使いたいのですが実「実行」できません,たかどなたか教えて頂けませんか。

  • エクセルVBAでConsolidate

    以下は、ネット検索で見つけたサンプルコードです。 同じフォルダ内の全ブックのSheet1のA1:B10をThisWorkbookのSheet1に統合しています。 Sub test2() Dim MyFile As String, MyPath As String Dim SumFile() As Variant, i As Long MyPath = ThisWorkbook.Path & "\" MyFile = Dir(MyPath, vbNormal) Do Until MyFile = "" If MyFile <> ThisWorkbook.Name Then ReDim Preserve SumFile(i) 'A1からB10の値を変数に代入 SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" i = i + 1 End If MyFile = Dir Loop If i = 0 Then MsgBox "データが有りません": Exit Sub Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile() End Sub 質問1 Sheet1だけでなく全シートのA1:B10をThisWorkbookのSheet1に統合するためにはどう書き換えればよいのでしょうか? 質問2 上記コードではなぜ、ブックを開かずにデータがとれるのでしょうか?

  • VBA 初心者

    sheet1から、sheet2データを検索して抽出する練習をしているのですがerror"1104"が表示されます、なぜなのか分からないので投稿しました、よろしくお願いします。 sub test() dim sh1 as worksheets dim sh2 as worksheets dim  i  as  integer set sh1 = thisworkbook.worksheets("sheet1!") set sh2 = thisworkbook.worksheets("sheet2!") b = userform1.textbox1 for i = 1 to 10 sh1 .cells(i,2) = b b = b+1 x = sh1.cells(1,2) sh1.cells(i,3).value = worksheetfunction.vlookup(x,sh2.range("a1:d500"),2,false) next i end sub

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • Excel VBAでの質問

    以前、質問に回答頂きそれを実行してうまくいったのですが、 特定のsheetだけsheetのつくりが違うため、 このsheetは毎回なにも処理をしないという処理を加えたいのですが、 (例えばsheet5とsheet8は処理をしない) 下記のコードにどのように付け加えればよいでしょうか? わかるかた宜しくお願い致します。 Dim i As Long For i = 1 To Worksheets.Count  If Worksheets(i).Range("A1").Value = 10 Then Worksheets(i).Range("K1") = Worksheets(i).Range("A1")  Worksheets(i).Range("A1:D80").ClearContents Next End Sub

専門家に質問してみよう