• 締切済み

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 ---------------------------------------

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

前のご質問 http://okwave.jp/qa/q5994307.html への回答と同様ですが、調査されたコードを生かすと下記の様にできます。 セルデータを一旦配列に入れたり、コードはより難しくなっていると思いますが。 前の質問はお閉め下さい。 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 Dim PpSlide As PowerPoint.Slide Dim PpShape As PowerPoint.Shape Set objRng = Worksheets("Sheet1").Range("A1:C2") varRng = objRng.Value Set objRng = Nothing Set PpApp = CreateObject("PowerPoint.Application") Set PpPrs = PpApp.Presentations.Add PpApp.Visible = True For i = 1 To UBound(varRng, 1) Set PpSlide = PpPrs.Slides.Add(i, ppLayoutBlank) For j = 1 To UBound(varRng, 2) Set PpShape = PpPrs.Slides(i).Shapes.AddTextbox(msoTextOrientationHorizontal, 30, 50 + 150 * (j - 1), 710, 140) With PpShape.TextFrame.TextRange .Text = CStr(varRng(i, j)) .Font.NameAscii = "Arial" .Font.NameFarEast = "MS Pゴシック" .Font.NameOther = "Arial" .Lines(1).Font.Size = 30 '1行目 End With Set PpShape = Nothing Next Set PpSlide = Nothing Next MsgBox "処理が終了しました。" Set PpPrs = Nothing Set PpApp = Nothing End Sub

関連するQ&A

  • 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

  • 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

  • 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 スライドに図形を挿入し文字を入力するには

    一番最後のスライドに、図形を挿入するところまでは出来たのですが その図形に文字を表示するにはどうすればいいでしょうか? Sub test() Dim myDocument As Variant i = ActivePresentation.Slides.Count Set myDocument = ActivePresentation.Slides(i) myDocument.Shapes.AddShape Type:=msoShapeRectangle, Left:=50, Top:=50, Width:=100, Height:=50 myDocument.Shapes.Title = "a" myDocument.Shapes.Text = "a" End Sub まではできたのですが、 myDocument.Shapes.Title = "a" myDocument.Shapes.Text = "a" がエラーになります。 別に図形ではなくてもテキストボックスが挿入できればそれでいいのですが、 図形の挿入の仕方しかわかりませんでした。

  • VBA超初心者です。

    プログラミング超初心者です。 下のは、pptxのスライド1枚目に表示されているすべての文字・色・大きさを1文字ずつ取ってくるマクロです。 これを改造して、 (1)pptxファイル内のすべてのスライドに対して (2)"文字 色 大きさ"の形式で (3)結果をテキストファイルに書き出す(スライド1枚につきテキストファイル1つでも、全部まとめてテキストファイル1に書き出すでもOK)(さらにシェイプ毎に分かれてくれたら尚嬉しい) にはどうすればいいのでしょうか? 改造後のソースを書いてくれると助かります。注文の多い我儘な質問ではありますが、よろしくお願いします。 ------------------------------------------------------------ Sub Sample1() '1文字ずつ文字情報取得 Dim myShape As Shape Dim myCharacter As Object 'スライド1のシェイプを処理 For Each myShape In ActivePresentation.Slides(1).Shapes With myShape 'テキストがあるシェイプを処理 If .TextFrame.HasText Then For Each myCharacter In .TextFrame.TextRange.Characters MsgBox "テキスト:" & myCharacter.Text & vbCrLf & _ "フォントカラー:" & myCharacter.Font.Color & vbCrLf & _ "フォントサイズ:" & myCharacter.Font.Size Next End If End With Next End Sub --------------------------------------------------------------

  • Excel VBAにて2の100乗を計算するには

    プログラミングの勉強でVBAを学んでいるものです 以下の様な問題を出されました 2の100乗の値を計算する。この値はLong型で表せる最大の値をはるかに超すので、十分な大きさのInteger型の配列を用意し、その各要素で各けたの値を表す。値を2倍するサブプロシージャ「二倍」を書いてプログラムを完成させ、値を計算せよ。 Option Explicit Sub 二の百乗() Const n As Integer = 200 Dim s(n) As Integer Dim i As Integer, j As Integer s(1) = 1 For i = 2 To UBound(s) 'UBoundは配列の最大の添え字を返す関数 s(i) = 0 Next i For i = 1 To 100 二倍 s Next i For i = UBound(s) To 1 Step -1 If s(i) <> 0 Then Exit For Next i For j = 1 To i Cells(1, j).Value = s(i - j + 1) Next j End Sub セル一つに計算結果を表示させられないことはよく分かるのですが、そのための2の掛け算を全く思いつきません 二倍のサブプロシージャをどのようにすればいいのでしょうか

  • エクセルVBA初心者です。

    エクセルVBA初心者です。 a1   3   5 a2   2   7 a3   1   7 a4   3   1 上で例えると、求めたい値は3*5+2*7+1*7+3*1=39です。  a1という文字を検索し、そして(a1の隣のセル)*(a1の隣の隣のセル)  次に (a2の隣のセル)*(a2の隣の隣のセル) と言う風にくりかえし、  最後に今まで乗算してでた値を合計してセルに結果を入力させるマクロなのですが、  エラーが何度も出て修正してはいるのですが、もうお手上げ状態です。   #以下がそのマクロです。 Sub マクロ() Dim fCell As Range, fAdr As String Dim a() As Double Dim i As Integer, j As Integer i = 0 j = 0 Set fCel = Cells.Find(What:="a1", LookAt:=xlWhole) If Not fCell Is Nothing Then Do While fCell.Offset(j, 0).Address <> fCell.End(Direction:=Down).Address j = j + 1 Loop ReDim a(j) As Double fAdr = fCell.Address For i = 0 To (j - 1) a(i) = fCell.Offset(0, 2).Value = fCell.Offset(0, 1).Value * fCell.Offset(0, 2).Value a(5) = a(5) + a(i) Next i fCell.Offset(j + 1, 1).Value = a(5) Else End If End Sub 本当に初心的なことだと思いますが、どうかよろしくお願いします。

  • Word VBA テキストボックスのフォントサイズ

    Wordでマクロを組んでいます。 文書内から取得した値を変数へ格納し、複数の変数をつないでテキストボックスに入れ、文書へ追加しています。 このテキストボックスの文字のフォントサイズを前と後ろで変えたいのですが、色々試していますがうまくいきません。 お分かりになる方がいらっしゃいましたら教えてください! 以下コードです。 下記の「EIJI」のみフォントサイズを20ptにしたいのです。 変数に格納する文字列は都度変化し、文字数も変わります。 よろしくお願いします! Sub try() Dim KANA As String, KATAKANA As String, EIJI As String KANA = "あああ" KATAKANA = "アアア" EIJI = "AAA" Dim myTxt As String myTxt = KANA & "/" & KATAKANA & "/" & EIJI Dim objTextBox As Object Set objTextBox = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, 25, 20, 530, 25) objTextBox.Select With Selection .Font.Size = 16 .TypeText Text:=myTxt End With End Sub

  • EXCEL VBAについて、ワークシート上に置いたTextBoxに値を入れる方法について

    すいませんEXCEL VBAについて質問があります。 エクセルのワークシート上にコントロールツールボックスから テキストボックスを2つ、コマンドボタンを1つ設置する。 アクティブになっているテキストボックスに”goo”という値を入れる。 これをVBAで処理するにはどうしたらよろしいのでしょうか。 ユーザーフォームのテキストボックスであれば Private Sub CommandButton1_Click() Dim i As Object Set i = ActiveControl If TypeOf i Is MSForms.TextBox Then i.Text = i.Text & "goo" End If Set i = Nothing End Sub これでできるはずですが、シート上に置くテキストボックスだと うまくいきません。 よろしくお願いいたします。

  • エクセルVBA/シェープの文字列を取得

    エクセル2010です。 BOOK内の各シートにボタンやチェックボックス、ラベルやテキストボックスなどが配置されています。 これらの貼り付けられたものの一覧を作りたいのです。 Sub obj_Check() Dim st Dim sp Dim i As Long For Each st In Sheets For Each sp In st.Shapes i = i + 1 With Sheets("Sheet3") .Cells(i, "A").Value = sp.Name ' .Cells(i, "B").Value = sp.Caption ’これがエラー .Cells(i, "C").Value = st.Name End With Next sp Next st End Sub とやってみましたがsp.Captionがエラーになります。 .Cells(i, "B").Value = sp.Shapes.Range.Character.Text としても同じです。 どうやったら、シェープに書かれた文字列が取得できるのでしょうか?

専門家に質問してみよう