Excel→PPTで日付データを和暦にするには?

このQ&Aのポイント
  • Excelのデータごとに1枚のPPTスライドをつくって転記するVBAを書きました。しかし、日付のフォーマット変更のやり方がわかりません。何かヒントをいただけませんか?
  • Excelのデータごとに1枚のPPTスライドをつくって転記するVBAを書きました。しかし、日付のフォーマット変更のやり方がわかりません。助けてください!
  • Excelのデータごとに1枚のPPTスライドをつくって転記するVBAを書いていますが、日付のフォーマット変更の方法がわかりません。どなたか教えてください。
回答を見る
  • ベストアンサー

Excel→PPTで日付データを和暦にするには?

以前、OKWAVEさんに掲載されていた質疑 http://okwave.jp/qa/q6023881.html を参考に、 Excelのデータごとに1枚のPPTスライドをつくって転記するVBAを書きました。 元のエクセルは A列:姓 B列:名 C列:文字データ D列:日付データ E列:整理番号 という5列のデータです。 下記のVBAでうまく動いたのですが、 元のエクセルでは和暦(例:平成28年8月8日)と表記していた 「日付」データ(D列→Lines(4)に該当 が、自動的に2016/08/08 と変換されてしまいます。 文字サイズやフォントの種類をlineごとに指定する方法はわかるのですが 日付のフォーマット変更のやり方がわからず・・・ いろいろと検索して、 Long Date "gee年mm月dd日" localdatetime などがポイントなのかなと思い いろいろと記述して試したのですが、もともとが初心者なのでうまくいきません。 何かヒントをいただけないでしょうか? よろしくお願いいたします。 ------ Sub ExceltoPowerPoint() Dim objRng As Range Dim varRng As Variant Dim intSNum As Integer Dim i, j As Integer Dim PpApp As PowerPoint.Application Dim PpPrs As PowerPoint.Presentation Set objRng = Worksheets("Sheet1").Range("A2:E6") varRng = objRng.Value Set objRng = Nothing Set PpApp = CreateObject("PowerPoint.Application") Set PpPrs = PpApp.Presentations.Add PpApp.Visible = True intSNum = 1 For i = 1 To UBound(varRng, 1) PpPrs.Slides.Add i, ppLayoutBlank PpPrs.Slides(i).Shapes.AddTextbox msoTextOrientationHorizontal, 0, 0, 710, 540 Next For i = 1 To UBound(varRng, 1) For j = 1 To UBound(varRng, 2) With PpPrs.Slides(intSNum).Shapes(1).TextFrame.TextRange If j = UBound(varRng, 2) Then .Text = .Text & CStr(varRng(i, j)) & vbNewLine intSNum = intSNum + 1 Else .Text = .Text & CStr(varRng(i, j)) & vbNewLine End If End With Next Next For i = 1 To UBound(varRng, 1) With PpPrs.Slides(i).Shapes(1).TextFrame.TextRange .Font.NameAscii = "Arial" .Font.NameFarEast = "HG正楷書体-PRO" .Font.NameOther = "Arial" .Lines(1).Font.Size = 44 .Lines(2).Font.Size = 44 .Lines(3).Font.Size = 32 .Lines(4).Font.Size = 32 .Lines(5).Font.Size = 20 End With Next MsgBox "処理が終了しました。" Set PpPrs = Nothing Set PpApp = Nothing End Sub

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは   If j = UBound(varRng, 2) Then     .Text = .Text & CStr(varRng(i, j)) & vbNewLine     intSNum = intSNum + 1   Else     .Text = .Text & CStr(IIf(j = 4, Format(varRng(i, j), "ggge年mm月dd日"), varRng(i, j))) & vbNewLine   End If としてみて下さい。

kobekimiko
質問者

お礼

ushi2015さま、ありがとうございました。 ばっちりできました。 ほかの列でフォーマット操作するときにも応用できそうです。 もっといろいろ勉強してみますm(__)m

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルVBAの世界では、下記は確実なので、文字列変数化(下記ではX)して、その段階でPPT(VBA)に渡せばどうですか。 エクセルで、確認テスト用 A1セルに 2016/8/9 A1は日付シリアル値の日付が入っているものとします(文字列とかでないということ。ppt側で以後個のデータを日付演算などに使わないという仮定で。また文字列を日付シリアル値化(変換)する関数はあるので、使いたければ使えると思うが)。 標準モジュールに Sub test01() x = WorksheetFunction.Text(Range("A1"), "ggge年mm月dd日") MsgBox x End Sub PPTシステム側でも日付は日付シリアル値で持っているかどうかよくわからないので。 (日付は、多分文字列で入力されるのだろう。 エクセル側(セル野値)では、セルの値は「日付シリアル値」で入れてないと、日付書式の設定や日数演算や日付関数利用にうまく使えない。 初めて日付シリアル値とい言葉を聞くようなら、WEBで照会し勉強すること。

kobekimiko
質問者

お礼

imogasiさま、さっそくのご回答ありがとうございます。 最初は、パワポ側でテキストボックスの表示形式を変えられるのでは・・・と思っていたのですが、文字列で入力されており変更できませんでした。 日付(シリアル値)を(関数で)文字列に変換した日付の列を挿入してからマクロを動かせばいいか、とも考えておりましたが、imogasiさんの教えてくださったモジュールも試しながら勉強してみます。 VBAは初心者にも満たない素人なのですが、みなさんが私の稚拙な説明でも状況を理解してくださって、本当に助かりました。ありがとうございました。

関連するQ&A

  • ExcelのデータをPPTにエクスポートしたいです(VBA初心者)

    ExcelのデータをPPTにエクスポートしたいです(VBA初心者) ネット検索などをして、下記の手順でエクスポートすることまではできたのですが、 これだと全てのセルデータがPPTの1つのテキストに入ってしまいます。 希望しているのは、セルごとにエクスポート先の テキストボックスを分けたいのですが、 ここから先が分かりません。 どなたかご教授いただけませんか。 よろしくお願いします。 <Excel> A B C D E 1 会社名(1) 住所(1) 担当者(1) 2 会社名(2) 住所(2) 担当者(2) 3 会社名(3) 住所(3) 担当者(3) <PPT> ・Sheet1 テキストボックス1   会社名(1) テキストボックス2   住所(1) テキストボックス3   担当者(1) ・Sheet2 テキストボックス1   会社名(2) テキストボックス2   住所(2) テキストボックス3   担当者(2) --------------------------------------- Sub ExceltoPowerPoint() Dim objRng As Range Dim varRng As Variant Dim intSNum As Integer Dim i, j As Integer Dim PpApp As PowerPoint.Application Dim PpPrs As PowerPoint.Presentation Set objRng = Worksheets("Sheet1").Range("A1:C5") varRng = objRng.Value Set objRng = Nothing Set PpApp = CreateObject("PowerPoint.Application") Set PpPrs = PpApp.Presentations.Add PpApp.Visible = True intSNum = 1 For i = 1 To UBound(varRng, 1) PpPrs.Slides.Add i, ppLayoutBlank PpPrs.Slides(i).Shapes.AddTextbox msoTextOrientationHorizontal, 0, 0, 710, 540 Next For i = 1 To UBound(varRng, 1) For j = 1 To UBound(varRng, 2) With PpPrs.Slides(intSNum).Shapes(1).TextFrame.TextRange If j = UBound(varRng, 2) Then .Text = .Text & CStr(varRng(i, j)) & vbNewLine intSNum = intSNum + 1 Else .Text = .Text & CStr(varRng(i, j)) & vbNewLine End If End With Next Next For i = 1 To UBound(varRng, 1) With PpPrs.Slides(i).Shapes(1).TextFrame.TextRange .Font.NameAscii = "Arial" .Font.NameFarEast = "MS Pゴシック" .Font.NameOther = "Arial" .Lines(1).Font.Size = 10 '1行目 .Lines(2).Font.Size = 30 '2行目 .Lines(3).Font.Size = 20 '3行目 End With Next MsgBox "処理が終了しました。" Set PpPrs = Nothing Set PpApp = Nothing End Sub ---------------------------------------

  • ExcelVBAでのPPT操作ついて

    表題の件、質問します。 困っている事が4点あります。 1.PowerPointへ挿入したテキストのサイズを変更したい 2.PowerPointへ挿入したテキストのフォントを変更したい 3.PowerPointへ挿入したグラフのサイズを変更したい 4.powerpointを名前を付けて、指定の場所へ保存 以上、宜しくお願いします。 参考にコードを記述します。 Sub test() Dim app As PowerPoint.Application Dim pre As PowerPoint.presentation Set app = CreateObject("powerpoint.application") app.Visible = True Set pre = app.Presentations(1) app.Presentations(1).Slides(1).Shapes.AddTextbox(msoTextOrientationHorizontal _ , 100, 100, 200, 50).TextFrame.TextRange.Text = "図1" '↑ここで作成したテキストのサイズを変更 '↑ここで作成したテキストのフォントを変更(例:MS 明朝)     Worksheets("グラフ").Shapes(1).CopyPicture pre.Slides(1).Shapes.Paste pre.Slides(1).Shapes(1).Left = 180 pre.Slides(1).Shapes(1).Top = 150 '↑ここで挿入したグラフのサイズを変更(例:縦横50%へ) '最後に、名前を付けて指定の場所へ保存 End Sub ※マクロ起動条件:  1.excelに"グラフ"のsheetがある事  2.sheet内にグラフがある事  3.powerpointを開いていること(スライドが1枚ある事)

  • パワーポイントVBAでグラフのサイズ・位置を統一

    パワーポイントVBAに貼付けた複数のグラフサイズを統一したいと思っています。 1~20枚目のスライドに、それぞれ2つのグラフが貼付けてあります。 全てのグラフサイズ・位置を統一したいと思い、以下の様なVBAを書いてみました。 ---------- Sub 表サイズの統一() Dim myTop1, myLft1, myHgt1, myWdt1, cnt, i, myTop2, myLft2, myHgt2, myWdt2 With ActivePresentation.Slides(1).Shapes(1) myTop1 = .Top myLft1 = .Left myHgt1 = .Height myWdt1 = .Width End With With ActivePresentation.Slides(1).Shapes(2) myTop2 = .Top myLft2 = .Left myHgt2 = .Height myWdt2 = .Width End With cnt = ActivePresentation.Slides.Count For i = 2 To cnt With ActivePresentation.Slides(i).Shapes(1) .Top = myTop1 .Left = myLft1 .Height = myHgt1 .Width = myWdt1 End With Next For i = 2 To cnt With ActivePresentation.Slides(i).Shapes(2) .Top = myTop2 .Left = myLft2 .Height = myHgt2 .Width = myWdt2 End With Next End Sub ---------- 各スライドにある1つ目のグラフのサイズは統一出来たのですが、2枚目のグラフは何の変化もおきません。 どこが悪いのか、どなたかご教示頂ければ幸いです。 どうぞよろしくお願い致します。

  • excel vba ppt テキストボックス中央揃

    したい事:エクセルからパワーポイントを作成したい       テキストボックスを作成       テキストボックスの文字を中央揃え←ここができないのです;; すいません、色々試したのですが中央揃えができません、どなたかご指導して頂けないでしょうか? ↓途中までのソース Sub PP作成_Click() Dim app As Object Dim pre As Object Dim sld   Dim sh As Object Set app = CreateObject("powerpoint.application") app.Visible = True ' // PP を表示する app.Visible = True ' // PP 新規プレゼンテーション作成 Set pre = app.Presentations.Add(WithWindow:=True) ' // PP 新規スライド挿入 Set sld = pre.Slides.Add(Index:=1, Layout:=12)   Set sh = sld.Shapes.AddTextbox(msoTextOrientationHorizontal _ , 100, 100, 200, 50)   With sh.TextFrame.TextRange    .Text = "テスト" .Font.Size = 100 .Font.Name = "HGP創英角ゴシックUB"   End With End Sub

  • PowerPoint2003でノートを一括削除するVBA

    調べたところ Sub test() Dim i As Integer i = ActivePresentation.Slides.Count For i = 1 To i With ActivePresentation.Slides(i).NotesPage .Shapes.Placeholders(2).TextFrame.TextRange = "" End With Next i End Sub   というマクロでいけるそうなのですが、幾つか試すと 「実行時エラー '2147188160(80048240)」': Placeholders(不明なメンバー):範囲外の整数2は次の有効な範囲にありません:1から1へ」 というエラーで停まるものがあります。   これの回避方法をご存知の方がいたら教えてください。

  • やはり図形のクリアで実行時エラー1004

     図形を二行三列で一枡とし図形を貼り付けていますが、どうしても実行時エラー 「1004」が出て図形のクリアができません。(尚、四角形は枠線上にあります。) 対処法がありましたらお願いします。 Windows7・SP1 Office2010 Sub 図形の貼付け() Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 9 To 99 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Cells(i + 1, j).Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 5: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 2).Select ActiveSheet.Paste Case 6: ActiveSheet.Shapes("円1").Select Selection.Copy Cells(i, j).Select ActiveSheet.Paste End Select Next Next End Select End Sub Sub 図形のクリア() Dim myRng As Range Set myRng = Range("I10:CW43") Dim n As Integer, sp As Variant For n = ActiveSheet.Shapes.Count To 1 Step -1 Set sp = ActiveSheet.Shapes(n) If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing  (ここで実行時エラー1004になります。) Then sp.Delete End If Next Set myRng = Nothing End Sub

  • 【エクセルマクロ】画像挿入について教えてください。

    Excel2010で下記マクロを実行し、 画像挿入元のフォルダ名を変更・削除したり、メールに添付して送信したりすると「リンクされたイメージを表示できません。ファイルが移動または削除されたか、名前が変更された可能性があります。リンクに正しいファイル名と場所が指定されていることを確認してください。」 と表示されます。 Excel2010では、Shapes.Addメソッドを使用するとリンク解除ができるとのことで、 初心者ながら色々試してみたのですが、うまくいきません。 マクロ初心者のため、詳しく教えていただけると大変助かります。 Private Sub Del_Btn_Click() 指定セル範囲 = "C18:K500" With ActiveSheet Set セル範囲 = .Range(指定セル範囲) For Each 図形 In .Shapes If 図形.Type = msoPicture Then Set 共有セル範囲 _ = Intersect(Range(図形.TopLeftCell, 図形.BottomRightCell), セル範囲) If Not (共有セル範囲 Is Nothing) Then 図形.Delete End If End If Next End With End Sub Private Sub Ins_Btn_Click() Dim fName As Variant Dim i As Long Dim j As Integer Dim k As Integer Dim Pict As Picture Const z1 As Long = 246 'サイズ指定 Const z2 As Long = 184 'サイズ指定 Dim z3 As Long '上位置 z3 = 306 k = 1 fName = Application.GetOpenFilename("JPGファイル, *.jpg", MultiSelect:=True) If IsArray(fName) Then Application.ScreenUpdating = False '配列に格納されたファイル名をソート BubbleSort fName, True 'If UBound(fName) >= 19 Then ' j = 19 ' Else j = UBound(fName) 'End If For i = 1 To j Set Pict = ActiveSheet.Pictures.Insert(fName(i)) If i Mod 6 = 5 Then z3 = z3 + 18.5 - k k = k + 0.5 End If If i Mod 2 = 1 Then With Pict .Width = z1 '横型 .Height = z2 '縦型 .Top = z3 + 146.5 * (i - 1) '上位置 .Left = 83 '左位置 .Locked = False ico = ico + z1 + 10 '間隔指定 End With Else With Pict .Width = z1 '横型 .Height = z2 '縦型 .Top = z3 + 146.5 * (i - 2) '上位置 .Left = 350 '左位置 .Locked = False ico = ico + z1 + 10 '間隔指定 End With End If ActiveCell.Offset(2, 0).Activate Application.StatusBar = "処理中:" & i & "/" & UBound(fName) & "枚目" Next i End If With Application .StatusBar = False .ScreenUpdating = True End With Set Pict = Nothing If i > 0 Then MsgBox j & "枚の画像を挿入しました", vbInformation End If End Sub '値の入替え Public Sub Swap(ByRef Dat1 As Variant, ByRef Dat2 As Variant) Dim varBuf As Variant varBuf = Dat1 Dat1 = Dat2 Dat2 = varBuf End Sub '配列のバブルソート Public Sub BubbleSort(ByRef aryDat As Variant, _ Optional ByVal SortAsc As Boolean = True) Dim i As Long Dim j As Long For i = LBound(aryDat) To UBound(aryDat) - 1 For j = LBound(aryDat) To LBound(aryDat) + UBound(aryDat) - i - 1 If aryDat(IIf(SortAsc, j, j + 1)) > aryDat(IIf(SortAsc, j + 1, j)) Then Call Swap(aryDat(j), aryDat(j + 1)) End If Next j Next i End Sub どうぞよろしくお願いいたします。

  • 配列に格納したデータを指定行以下に転記する方法

    excel2000を使っています。 以下のコードだと最終行にデータが転記されます。これを4行目に確定して、転記したいのです。常に4行目つまりA列4行目以下に上書きしたいのです。 その場合コードをどのように変更すべきでしょうか? Sub 配列() With ActiveSheet ' 配列に格納 --------------------------- Dim i As Integer Dim LastRow As Long Dim SaleAry As Variant ' 配列に格納 --------------------------- SaleAry = Array(.Range("t4"), .Range("e5"), .Range("g5"), .Range("o5")) End With ' 転記 --------------------------- With Worksheets("daityou") LastRow = .Range("A65536").End(xlUp).Row For i = 0 To UBound(SaleAry) .Cells(LastRow + 1, i + 1).Value = SaleAry(i) ' Next i End With Set SaleAry = Nothing End Sub

  • 【Excel VBA】カンマ毎にデータを区切る

    はじめて質問をさせて頂きます。 Excel VBAは初心者です。 仕事で必要なため、本を読みながら考えておりましたが、 手も足も出ない状態です。 【質問内容】 Excel VBAにて、ExcelファイルのA列のみに格納されているデータを カンマ「,」の位置毎に区切ります。 ※格納されているデータ例:A,B,C,D,E Excelの区切り位置にて、カンマで区切る処理と同じです。 A1から処理を開始し、A列のデータがなくなるまで 上記の処理を行います。 下記のプログラムを実行すると、1行目は正常にカンマ毎に 区切られますが、2行目以降はカンマ毎に区切られず、 そのままの状態です。 どこに問題があり、どのように修正すれば良いのでしょうか、 ご教示頂けると助かります。宜しくお願いします。 【プログラム】 Sub カンマ毎に区切る() Dim mydata As String Dim myArray() As String Dim i, j As Integer j = 0 Do While Cells(j + 1, "A").Value <> "" mydata = Cells(j + 1, 1) myArray() = Split(mydata, ",") For i = 0 To UBound(myArray) Cells(1, i + 1).Value = myArray(i) Next j = j + 1 Loop End Sub

  • マクロdictionaryオブジェクト書き換え

    ここで教えていただいたマクロを   シート1のF列を検索値として   シート2のA列を検索しヒットしたら   シート2の該当行のD列をシート1のAE列に転記。   データの2列目から行う。ヒットしない場合は 無 と転記。 と変更したくて記述を書き換えたらシート1が壊れてしまいました。 正しい記述を教えてください。 ↓教えていただいた書き換え前の正常動作する記述↓ Sub 検索() 'dictionaryオブジェクトを使用 'シート1のA列を検索値として 'シート2のA列を検索しヒットしたら 'シート2の該当行のE列をシート1のC列に転記 'データの2行目から行う。ヒットしない場合は無しと転記 Dim dic As Object Dim i As Long Dim v, w Dim t As Single t = Timer With Sheets("Sheet2") '返す値を指定E列 With .Range("E2", .Cells(.Rows.Count, 1).End(xlUp)) '検索する列指定 (1)=A列 v = .Columns(1).Value '返す値のある列指定 (5)=E列 w = .Columns(5).Value End With End With Set dic = CreateObject("scripting.dictionary") For i = 1 To UBound(v) dic(v(i, 1)) = i Next With Sheets("Sheet1") '検索値のある列指定 A列 With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) v = .Value For i = 1 To UBound(v) If dic.exists(v(i, 1)) Then v(i, 1) = w(dic(v(i, 1)), 1) Else v(i, 1) = "無" End If Next '転記する列を指定 Offset(, 2)=検索値のA列より右2つ→C列 With .Offset(, 2) .ClearContents .Value = v End With End With End With Set dic = Nothing Debug.Print Timer - t End Sub ---- ↓書き換えておかしな動きになった物 ●の部分を変更しました↓ Sub 検索02() 'dictionaryオブジェクトを使用 'シート1のF列を検索値として 'シート2のA列を検索しヒットしたら 'シート2の該当行のD列をシート1のAE列に転記 'データの2行目から行う。ヒットしない場合は無しと転記 Dim dic As Object Dim i As Long Dim v, w Dim t As Single t = Timer With Sheets("Sheet2") '返す値を指定D列● With .Range("D2", .Cells(.Rows.Count, 1).End(xlUp)) '検索する列指定 (1)=A列 v = .Columns(1).Value '返す値のある列指定 (4)=D列● w = .Columns(4).Value End With End With Set dic = CreateObject("scripting.dictionary") For i = 1 To UBound(v) dic(v(i, 1)) = i Next With Sheets("Sheet1") '検索値のある列指定 F列● With .Range("F2", .Cells(.Rows.Count, 1).End(xlUp)) v = .Value For i = 1 To UBound(v) If dic.exists(v(i, 1)) Then v(i, 1) = w(dic(v(i, 1)), 1) Else v(i, 1) = "無" End If Next '転記する列を指定  'Offset(, 25)=検索値のA列より右25個→AE列● With .Offset(, 25) .ClearContents .Value = v End With End With End With Set dic = Nothing Debug.Print Timer - t End Sub

専門家に質問してみよう