VBA(エクセル)で日付を変換出力する方法

このQ&Aのポイント
  • VBA(エクセル)を使用して、指定したセルの日付を別のシートに変換して出力する方法を教えてください。
  • 具体的には、セルに入力された『17.10.11』という日付を『平成17年10月11日』に変換して、別のシートに出力したいです。
  • 現在、コピープログラムでは指定セルの内容をそのまま別のシートにコピーしていますが、日付の形式を変換して出力する方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

VBA(エクセル)で『17.10.11』を『平成17年10月11日』の変換出力

エクセルのVBAでプログラムをつくりました。 その内容はシート1でいくつかセルに値を入力した後、 マクロを実行すると指定したセルのそのままの内容が、シート2へコピーされるというものです。 そこで『日付』を入力する欄があるのですが、 そこには『17.10.11』と入力する欄があるのです。 これをシート2へコピー出力するときに 『平成17年10月11日』という風に方変換して 出力したいのです。どうすればいいでしょうか? どうか教えていただけたらうれしいです。 ちなみにコピープログラムはこんな感じにしています s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") A1セルに日付を入れる欄があるのでここを型変換して出力したいのです。助けてください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>『17.12.12.17:02』だったり『17.12.12.12:00~17.12.12.14:00』だったりする 'だいだい、こんな感じかと Public Sub test() Dim a Dim str As String str = s.Cells(r, 1).Value If InStr(str, "~") > 0 Then a = Split(str, "~") str = toDateStr(a(0)) & "から" & toDateStr(a(1)) & "の間" Else str = toDateStr(str) End If Sheets("Sheet2").Range("A1") .Value = StrConv(str, vbWide) End Sub Private Function toDateStr(s) As String Dim d, t d = Split(s, ".") t = Split(d(3), ":") t(0) = CInt(t(0)) toDateStr = "平成" & d(0) & "年" & d(1) & "月" & d(2) & "日" & IIf(t(0) >= 12, "午後" & (t(0) - 12), "午前" & t(0)) & "時" & t(1) & "分" End Function

asdasdd
質問者

お礼

すいません。わたしの勘違いでしたm(_ _)m 本当にいろいろご指導ありがとうございました。 本当に勉強になりました。 BLUEPIXYさんには感謝ばかりです。

asdasdd
質問者

補足

なにか私のやり方がまずいのか、コピーさせてもらい貼り付けてもオブジェクトが必要ですというエラーがでてしまいます。何がまずいのでしょうか?? 何度もすいません。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>平成17年12月16日から平成17年12月18日までの間 Dim a Dim str As String str = Replace(s.Cells(r, 1).Value, " ", "") '全角スペース削除 str = Replace(str, " ", "") '半角スペース削除 str = Replace(str, "~", ".") '~を置換 a = Split(str, ".") str = "平成" & a(0) & "年" & a(1) & "月" & a(2) & "日から平成" & a(3) & "年" & a(4) & "月" & a(5) & "日までの間" Sheets("Sheet2").Range("A1").Value = StrConv(str, vbWide)

asdasdd
質問者

補足

BLUEPIXYさんたびたび申し訳ありません。またもう一つどうしても必要な機能がでてきてしまいました。いろいろ調べてもわからず頼みの綱がBLUEPIXYさんだけだったので・・もしわかればお願いします。 日付の入力欄(すいません。時刻が必要になりましたm(_ _)m)は 『17.12.12.17:02』だったり『17.12.12.12:00~17.12.12.14:00』だったり するのですが、前回質問したときと同じようにこれを判別して『平成17年12月12日午後5時02分』というような表記方式にするプログラムはできないでしょうか? もし後記のような『~』が入った場合は『から』を付けて同じような表記に変換して出力したいのです。 ちなみに時刻は何時のところだけ午前午後判別できればいいのですが・・・ もう頼みの綱がBLUEPIXYさんしかいません。 もしわかればお願いいたします。すいません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Dim a a = Split(s.Cells(r, 1).Value, ".") Sheets("Sheet2").Range("A1").value=StrConv("平成" & a(0) & "年" & a(1) & "月" & a(2) & "日", vbWide) でいいと思います。 個人的には、文字列にしてしまう方が応用が利かないと思いますが・

asdasdd
質問者

補足

本当にありがとうございます。かなり悩んだ結果、BLUEPIXYさんのおかげで悩みが解決しました。 もし、わかればでよろしいのですが、これを発展させて『17.12.16 ~ 17.12.18』と打ったら同じように シート2に 『平成17年12月16日から平成17年12月18日までの間』 という『~』は『から』という文字に変更して、↑のようなものを出力することは可能でしょうか??? もし今ほど教えてもらったプログラムをベースにしてできるなら教えていただけるとうれしい限りです。 m(_ _)m

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

エクセルで日付として扱えるものとして出力するのでしょうか それとも、単なる文字列として出力するのでしょうか

asdasdd
質問者

補足

お早いご回答本当にありがとうございます。 シート1にはピリオドを使います。 『17.12.16』 これをマクロ実行すると シート2に 『平成17年12月16日』という風にとにかく出力できればいいのですが、 はば広く応用が聞くという意味では、文字列として出力したいなと感じています。

関連するQ&A

  • VBA(エクセル)でコピー+文字を足す

    エクセルのVBAを使ってシート1の指定セルに打った内容を、マクロを実行するとシート2の指定セルに入力できるようにしました。 プログラムは s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") な感じです。 ここに文字を追加して出力したいのですが、どうすればいいのでしょうか? シート2にコピー出力される内容に、 『成績 第○位』という文字を追加して出力したいのです。つまり○の部分にシート1で打った内容(例11)を、 シート2では(例『成績 第11位』)という内容を表示したいのですが、どのようなプログラムを追加すればよいのでしょうか? 本当に困っています。どなたか助けてください。

  • VBA(エクセルで改行したもの→改行なしでコピー)

    VBAでシート1の指定セルの内容をシート2の指定セルにコピーするプログラムをつくりました。 a.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") こんな感じです。 これだとシート1で1つのセル内で改行してると、そのままの状態でシート2にコピーされてしまいます。 これをシート1では改行されていますが、シート2では改行なしで出力したいのです。 こんなプログラムを組むことは可能なのでしょうか? 知っている方がいましたらお願いします。知恵を貸してください。 本当に困っています。

  • エクセルVBAで選択していないシートのセルコピー

    エクセルVBAで質問させてください。 現在選択していないシートから、セルの書式ごとコピーして貼り付けたいのです。 たとえば Sheets(1).Range(Cells(1, 1), Cells(4, 1)).Copy Sheets(2).Range("A1") 等とすると、Sheets(2)が選択されている状態だとエラーになってしまいます。 おそらく、Copyメソッドというのは、選択されているシートにのみ有効だからなのではないか、と思いますが、セルの値だけでなくフォントその他の書式を、別のシート(現在アクティブでない)から持ってくる方法はありますか?

  • エクセル2000VBA コマンドボタンがうまく動きません

    こんにちは、VBA初心者です。 2枚のシートがあり、「入力」というシートの任意のセルを、「出力」という別シートにコピーするという作業をコマンドボタンによって行いたいと思っています。 自分で作ってみたものは、このようになります。 Private Sub 任意の行のコピー・印刷_Click() Application.ScreenUpdating = False 'セル内容コピー Selection.Copy Sheets("出力").Select Range("A9").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Sheets("入力").Select ActiveCell.Offset(0, 1).Select Application.CutCopyMode = False Selection.Copy Sheets("出力").Select Range("C9").Select (以下略) ところが、これだと 「実行時エラー1004 RangeクラスのSelectメソッドが失敗しました」と表示され、デバッグをかけると6行目のRange("A9").Selectが黄色く反転した状態になります。 どうしてでしょうか。 同じ内容のものをマクロで登録し、実行すると、何の問題もなく動くのですが… ほとほと困っております。 どうかよろしくお願いします。

  • エクセル VBA

    (1) Sub 印刷() With Sheets("原本") .Cells.FormatConditions.Delete .PageSetup.PrintArea = Range("A1:K73").Address .PrintOut End With End Sub としているのですが ボタンを間違って押した時も印刷がされてしまいます 押したときに 印刷しますか? はい いいえ みたいなのを確認するようにしたいのですが どうすればいいでしょうか? (2) Sub 保存() Dim MySheetName As String MySheetName = InputBox("シート名を入力してください") Sheets("9月1日").Copy After:=Sheets(Worksheets.Count) ActiveSheet.Name = MySheetName Sheets("原本").Range("A1:K73").Copy Sheets("原本").Range("A1") End Sub で原本シートをコピーして新しいシートを作成するプログラムを 作ったのですが、シート名を入力しはいを押すと作成されるのですが キャンセルを押した時も勝手にシートが作成されるのですが キャンセル時は何もシートを作成しないように したいのですが どうしたらいいでしょうか? どちらも教えて貰いながら作成したため 自分で修正できなく困ってます お手数ですがよろしくお願いします

  • VBAを使って一つのセル内で文書を改行

    現在VBAを使ってシート1の内容をシート2にコピーさせるもの作りました。↓ s.Cells(r, 1).Copy Sheets("Sheet2").Range("A1") これでさらにシート2にコピーしたないようは 同じセル内で改行したいのです。 いわばAlt+Enterキーみたいな機能なのですが・・・ つまり出力がシート1の指定セルの内容が 『新年あけましておめでとう』なのですが、シート2は 『新年あけまして  おめでとう』という内容を出力したいのですが、 改行のプログラムはわかりますでしょうか??m(_ _)m 簡単なプログラムでもいいのです。 もしわかれば他にも応用したいので、この例で行くと『て』という文字を判別して『て』という文字があったらその文字のあとを改行させたいのですができますでしょうか?

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

  • エクセルVBA ブック出力方法について(2)

    いつもお世話になっています。 以前にも同じ内容の質問をさせて頂いた者です。 回答を頂きましたが、当方説明不足および勉強不足のため、 再度質問させて頂きます。 元のファイルから、特定のセル部分のみを出力先ファイル(新規.xls)へブック出力したいのですが 方法がわかりません。 当方にて記述したVBAは以下ですが、満足のいく作成ができておりません。 矛盾および誤りを指摘できる方はご指摘頂けないでしょうか。よろしくお願いします。 Sub ブック出力() Sheets("Sheet1").Select Sheets("Sheet1").Range("リスト").Copy Sheets("Sheet1").Range("A1:J12").Paste Workbooks.Add ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\新規.xls" End Sub ※リスト→出力元ファイルのA1:J12までの範囲 ※出力元ファイル、出力先ファイルのシート名は不変です。(両方ともsheet1) ※出力先セル、出力元セルともに範囲は同じです。(両方ともA1:J12)

  • エクセルVBAのコピー方法について。

    セル結合された表を別シートコピーする方法を教えてください。 以下のように記述しましが、実行時エラーとなり 「結合されたセルの一部を変更することはできません。」となります。 Range("A1").CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") よろしくお願いします。

  • エクセルVBAですが教えてください。オートシェイプがコピーされません。

    またまたお世話になります。「入力」シートから「コピー先」シート にコピーして貼付したいのですが、コードで記述してうまくいき ません。すごく簡単なことかと思いますが、まったく解決できず にいます。何か足りないのでしょうか?よろしくご指導ください。 Sheets("入力").Select Range("A1:V20").Copy Sheets("コピー先").Range("A22").PasteSpecial Paste:=xlAll Application.CutCopyMode = False