Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14 / 45 ページ ←次へ | 前へ→

【641】Re:csvを表に変換したいのですが。。。
お礼  かすみ  - 09/5/20(水) 17:23 -

引用なし
パスワード
   りるさん、こんばんは。

今回もりるさんのご教授を参考に問題を解決できました。ありがとうございます。

ワードマクロは初めて触ったのですが、勝手が分からず混乱しておりまして、非常に助かりました。

この度はたいへんお世話になりました。
改めて御礼を申し上げます。
・ツリー全体表示

【640】Re:csvを表に変換したいのですが。。。
回答  りる  - 09/5/19(火) 19:05 -

引用なし
パスワード
   かすみ さん、こんばんは。

>カンマで区切られた、データのn番目とn番目を抜き出して、表にするにはどのようにしたら良いでしょうか。
>sprit関数を使うということは調べられたのですが。。。
Spritの使い方はわりと最近EXCEL質問箱でもあったので省きますが。

>重ねての質問であり、誠に申し訳ないのですが、ヒントだけでも頂ければ幸いです。
csvを1行ずつ読み込み、Splitで分割してから必要なところだけをドッキングした文字列を作成し、文書にとりこんで表のオートフォーマットで体裁を整えています。

Sub tempo2()
  Dim s1 As String, s2 As Variant, s3 As String
  Ifile = "D:\Tempo\Tempo2.csv"
  Open Ifile For Input As #1
   Do Until EOF(1)
     Line Input #1, s1
     If s3 <> "" Then s3 = s3 & vbCrLf
     s2 = Split(s1, ",") 'カンマで区切る(0スタート)
     'エラーチェックはしていません
     '    |2番目    |6番目    |9番目    |12番目&13番目|
     s3 = s3 & s2(1) & "," & s2(5) & "," & s2(8) & "," & s2(11) & s2(12)
   Loop
  Close #1
  Application.Documents.Add
  With ActiveDocument.Content
   'テキストを文書に
   .Text = s3
   '表の体裁に
   .ConvertToTable Separator:=wdSeparateByCommas, AutoFitBehavior:=wdAutoFitFixed
  End With
End Sub
・ツリー全体表示

【639】Re:csvを表に変換したいのですが。。。
質問  かすみ  - 09/5/19(火) 15:11 -

引用なし
パスワード
   りるさん
朝早くから早速のご回答頂き、本当にありがとうございます。
ご教授頂いた方法を参考に、未熟な私にも目的が達せられました。
とても感謝しております。

大変恐縮なのですが、重複するような事例ですので重ねて質問をさせて頂きたいのです。
また別のものなのですが
カンマで区切られた、データのn番目とn番目を抜き出して、表にするにはどのようにしたら良いでしょうか。
sprit関数を使うということは調べられたのですが。。。

下記のようなCSVファイルです。
01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
31,32,33,34,35,36,37,38,39,40,41,42,43,44,45
以下数十行続く。数字は実際には、不規則な文字列。

表にするときには、カンマの何番目かは決まっています。
一行目 |2番目|6番目|9番目|12番目&13番目|
二行目 |2番目|6番目|9番目|12番目&13番目|
以下数十行続く。


重ねての質問であり、誠に申し訳ないのですが、ヒントだけでも頂ければ幸いです。
どうかよろしくお願いいたします。
・ツリー全体表示

【638】Re:csvを表に変換したいのですが。。。
回答  りる  - 09/5/19(火) 4:49 -

引用なし
パスワード
   かすみ さん、おはようございます。
>はじめて投稿いたします。
>Wordでのマクロ作成に苦心しており、お知恵を拝借したく投稿いたしました。
>CSVのファイルから、Wordで表作成をしたいのです。
>
>CSVファイルの中身が以下のようになっています。
>○○○,○○●●▲○○,■▲■,○○,○○,○○,▼▼●●,▼▲,▲▲●●,■■▲●
>○○○,○○▲▲■○○,■■●■,○○,○○,○○,▼●●,●▲●,▼●
>○○○,○○▲■▲○○,●▼,○○,○○,○○,■●▼,■▲,●■■
>以下数十行続く。

>○の文字列だけを取り除いて、カンマで区切られた部分を各セルに振り分けるイメージ。
>|●●▲|■▲■ |▼▼●●|▼▲ |▲▲●●|■■▲●
>|▲▲■|■■●■|▼●● |●▲●|▼●  |
>|▲■▲|●▼  |■●▼ |■▲ |●■■ |

>何卒よろしくお願いいたします。
○を抜いた後にセルがずれるかどうかわからないので、表にしてから行を削除しています。

Sub Tempo()
  Dim Ifile As String, s1 As String
  Dim RR As Long, CC As Long, Rmax As Long, Cmax As Long
  '新しい文書で作業
  Application.Documents.Add
  '読み込むファイル名
  Ifile = "C:\Tempo\Tempo.csv"
  'ファイルを読み込む『挿入→ファイル』
  With ActiveDocument.Content
   .InsertFile FileName:=Ifile, Range:="", _
   ConfirmConversions:=False, Link:=False, Attachment:=False
   '○を抜く『編集→置換』
   With .Find
     .Text = "○"
     .Replacement.Text = ""
     .Execute Replace:=wdReplaceAll
   End With
   '表に変換『罫線→表のオートフォーマット』
   .ConvertToTable Separator:=wdSeparateByCommas, AutoFitBehavior:=wdAutoFitFixed
   '追加した表を処理
   With .Tables(1)
     Cmax = .Columns.Count
     Rmax = .Rows.Count
     '
     For CC = Cmax To 1 Step -1
      s1 = ""
      '制御コード等を消した状態で全行空欄だったら列削除
      For RR = 1 To Rmax
        s1 = s1 & Replace(Replace(.Cell(RR, CC).Range.Text, Chr(13), ""), Chr(7), "")
      Next
      '全行空欄の列を抜く『罫線→削除→列』
      If s1 = "" Then .Columns(CC).Delete
     Next
   End With
   '保存したフリ
   .Parent.Saved = True
  End With
End Sub

『』内はマクロ記録した手順です。
ちなみに、13と7を消しているのは、確認してみたらそれが入っていたからです。
13はともかく何故7が入っているのかはよくわかりません。
・ツリー全体表示

【637】csvを表に変換したいのですが。。。
質問  かすみ  - 09/5/18(月) 14:52 -

引用なし
パスワード
   はじめて投稿いたします。
Wordでのマクロ作成に苦心しており、お知恵を拝借したく投稿いたしました。
CSVのファイルから、Wordで表作成をしたいのです。

CSVファイルの中身が以下のようになっています。
○○○,○○●●▲○○,■▲■,○○,○○,○○,▼▼●●,▼▲,▲▲●●,■■▲●
○○○,○○▲▲■○○,■■●■,○○,○○,○○,▼●●,●▲●,▼●
○○○,○○▲■▲○○,●▼,○○,○○,○○,■●▼,■▲,●■■
以下数十行続く。

▲、■、▼は同じ文字列でなく、一つずつ全く異なる文字列です。
○は不必要な文字列です。

上のCSVファイルを以下の様な表にしたいのです。
○の文字列だけを取り除いて、カンマで区切られた部分を各セルに振り分けるイメージ。
|●●▲|■▲■ |▼▼●●|▼▲ |▲▲●●|■■▲●
|▲▲■|■■●■|▼●● |●▲●|▼●  |
|▲■▲|●▼  |■●▼ |■▲ |●■■ |

何卒よろしくお願いいたします。
・ツリー全体表示

【636】Re:複数のフォーム対応
お礼  スーザン  - 09/5/10(日) 19:52 -

引用なし
パスワード
   りるさん。
ありがとうございます。
思っていた通りの事ができました。
また、いろいろ教えてください。
・ツリー全体表示

【635】Re:複数のフォーム対応
発言  りる  - 09/5/9(土) 9:53 -

引用なし
パスワード
   スーザン さん。おはようございます。

>りるさんが言うように、1つのフォームに4つのテキストボックスがあり、また1つのコマンドボタンがあるのです。

でしたら、これで。

○ボタンのあるフォームに
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 7 ' 7行目に転記するテキストボックスのText
  Test TextBox2.Text, 8 ' 8行目     〃
  Test TextBox3.Text, 9 ' 9行目     〃
  Test TextBox4.Text, 10, Me  ' 10行目 〃
End Sub

○標準モジュールを挿入して以下を記述。
※前回書いたので省略。
・ツリー全体表示

【634】Re:フォームテキスト入力
お礼  すみん  - 09/5/7(木) 22:04 -

引用なし
パスワード
   りるさん。ありがとうございました。

やりたかった事が可能になりました。
・ツリー全体表示

【633】Re:複数のフォーム対応
発言  スーザン  - 09/5/7(木) 22:01 -

引用なし
パスワード
   りるさん
真剣に考えてくれているのに、私の用量が悪くて申し訳ないです。
りるさんが言うように、1つのフォームに4つのテキストボックスがあり、また1つのコマンドボタンがあるのです。
誠に申し訳ありませんでした。

上記の内容の場合、どのような記述をしたらよいのでしょうか?
・ツリー全体表示

【632】Re:複数のフォーム対応
発言  りる  - 09/5/7(木) 7:43 -

引用なし
パスワード
   スーザン さん、おはようございます。


>と言うのも、今住所宛名フォームを作成いており、4つの項目というのが、郵便番号、住所、方書、名前なのです。
4つのフォームじゃなくて、ひとつのフォームにテキストボックスを4つ置いたほうが管理しやすそうですね。
Exitのタイミングで順番に表示していくのかな?

>そのフォームに、必要項目を入力後に、コマンドボタンをクリックすることにより、ワード上に転写される方法を考えています。

ということなので、

○ボタンのあるフォームに
Private Sub CommandButton1_Click()
  Test UserFormA.TextBox1.Text, 7 'UserForm名とTextBox名を合わせてください
  Test UserFormB.TextBox1.Text, 8 ’上に同じ
  Test UserFormC.TextBox1.Text, 9 ’上に同じ
  Test Me.TextBox1.Text, 10, Me  ’上に同じ
End Sub

○標準モジュールを挿入して以下を記述。
Sub Test(arg1 As String, arg2 As Long, Optional arg3 As Object)
  'ドキュメントの先頭
  ActiveDocument.Range(Start:=0, End:=0).Select
  '3行目に移動(下に2つ移動)
  Selection.MoveDown wdLine, arg2 - 1, wdMove
  'そこに文字を挿入(選択範囲の拡張なし)
  With Selection
   .InsertBefore arg1
   .Collapse Direction:=wdCollapseEnd
  End With
  'フォームを閉じる
  If Not arg3 Is Nothing Then arg3.Hide
End Sub
・ツリー全体表示

【631】Re:複数のフォーム対応
質問  スーザン  - 09/5/6(水) 14:35 -

引用なし
パスワード
   りる さん、こんにちは。
昨日は、回答ありがとうございました。

実は、各フォームにボタンはなく、4つのフォームに1つのボタンなのです。
と言うのも、今住所宛名フォームを作成いており、4つの項目というのが、郵便番号、住所、方書、名前なのです。
そのフォームに、必要項目を入力後に、コマンドボタンをクリックすることにより、ワード上に転写される方法を考えています。

結構無謀な挑戦なんですけどね。
・ツリー全体表示

【630】Re:複数のフォーム対応
回答  りる  - 09/5/5(火) 20:27 -

引用なし
パスワード
   スーザン さん、こんばんわ。

>具体的に言いますと、フォームが複数あり、ワードのシートに転記したいのです。
>
>フォームAの情報を、ワード上の7段目
>フォームBの情報を、ワード上の8段目
>フォームCの情報を、ワード上の9段目
>フォームDの情報を、ワード上の10段目に、入力後、コマンドボタンをクリックして、ワード上にそれぞれ転記する。

内容からすると、マルチページで分岐したほうがよさそうですが、フォームが4つあるということでしょうか?
それぞれのフォームにCommandButton1とTextBox1があるとして(オブジェクト名が違う場合はそれに合わせてください)。

○FormAに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 7, Me
End Sub

○FormBに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 8, Me
End Sub

○FormCに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 9, Me
End Sub

○FormDに。
Private Sub CommandButton1_Click()
  Test TextBox1.Text, 10, Me
End Sub

○標準モジュールを挿入して以下を記述。
Sub Test(arg1 As String, arg2 As Long, Optional arg3 As Object)
  'ドキュメントの先頭
  ActiveDocument.Range(Start:=0, End:=0).Select
  '3行目に移動(下に2つ移動)
  Selection.MoveDown wdLine, arg2 - 1, wdMove
  'そこに文字を挿入(選択範囲の拡張なし)
  With Selection
   .InsertBefore arg1
   .Collapse Direction:=wdCollapseEnd
  End With
  'フォームを閉じる
  If Not arg3 Is Nothing Then arg3.Hide
End Sub

A〜Cのボタンはフォームの切り替えで、Dだけ転記の場合は、
○FormAに。
Private Sub CommandButton1_Click()
  Me.Hide
  UserFormB.Show
End Sub

○FormBに。
Private Sub CommandButton1_Click()
  Me.Hide
  UserFormC.Show
End Sub

○FormCに。
Private Sub CommandButton1_Click()
  Me.Hide
  UserFormD.Show
End Sub

○FormDに。
Private Sub CommandButton1_Click()
  Test UserFormA.TextBox1.Text, 7
  Test UserFormB.TextBox1.Text, 8
  Test UserFormC.TextBox1.Text, 9
  Test Me.TextBox1.Text, 10, Me
End Sub

◎標準モジュールは上と同じ。

フォームを切り替えるよりもマルチページやフレームで対応するほうが簡単かもしれないですね。
・ツリー全体表示

【629】Re:フォームテキスト入力
回答  りる  - 09/5/5(火) 20:00 -

引用なし
パスワード
   すみん さん、こんばんわ。

>今回は、先頭でしたが、先頭から、3行目に転記する場合は、どのようにすればいいのでしょうか?
>
>With ActiveDocument.Range(Start:=0, End:=1)のStart:=0, End:=1の部分を変更すれば可能なのでしょうか?

RangeよりもSelectionを使ったほうがわかりやすい(というか簡単)みたいなので、方法を変えました。

文書頭にカーソルを持ってきて、下に2行移動するイメージです。

Private Sub CommandButton1_Click()
  'ドキュメントの先頭
  ActiveDocument.Range(Start:=0, End:=0).Select
  '3行目に移動(下に2つ移動)
  Selection.MoveDown wdLine, 2, wdMove
  'そこに文字を挿入(選択範囲の拡張なし)
  With Selection
   .InsertBefore TextBox1.Text
   .Collapse Direction:=wdCollapseEnd
  End With
  'Formを閉じる
  Me.Hide
End Sub
・ツリー全体表示

【628】複数のフォーム対応
質問  スーザン  - 09/5/5(火) 15:04 -

引用なし
パスワード
   フォームの転記方法を、すみさんの質問より拝見しました。
私も、参考にさせていただきましが、フォームが複数の場合は、どのようにしたらいいのでしょうか。

具体的に言いますと、フォームが複数あり、ワードのシートに転記したいのです。

フォームAの情報を、ワード上の7段目
フォームBの情報を、ワード上の8段目
フォームCの情報を、ワード上の9段目
フォームDの情報を、ワード上の10段目に、入力後、コマンドボタンをクリックして、ワード上にそれぞれ転記する。

このような方法を教えてください。
・ツリー全体表示

【627】Re:フォームテキスト入力
質問  すみん  - 09/5/5(火) 13:36 -

引用なし
パスワード
   ▼りる さん:
りるさん、ありがとうございます。

僕の表現が悪かったんですが、りるさんの回答のとおり、テキストボックスに入力した情報を、コマンドボタンのクリックによる転記による方法です。

今回は、先頭でしたが、先頭から、3行目に転記する場合は、どのようにすればいいのでしょうか?

With ActiveDocument.Range(Start:=0, End:=1)のStart:=0, End:=1の部分を変更すれば可能なのでしょうか?
・ツリー全体表示

【626】Re:フォームテキスト入力
回答  りる  - 09/5/5(火) 7:16 -

引用なし
パスワード
   すみん さん、おはようございます。

>ユーザーフォームのテキストボックスに入力した文字をワード上に表示させるにはどのようにしたらいいのでしょうか?
>ワードの表示場所は、先頭になります。
どのタイミングで転記するのかわからないので、コマンドボタン(CommandButton1)クリックで転記する例です。

UserForm1にCommandButton1とTextBox1を配置して、以下を記述。

Private Sub CommandButton1_Click()
  '常にドキュメントの先頭に挿入する場合
  With ActiveDocument.Range(Start:=0, End:=1)
   .InsertBefore TextBox1.Text
   .Collapse Direction:=wdCollapseEnd
  End With
End Sub
・ツリー全体表示

【625】フォームテキスト入力
質問  すみん  - 09/5/3(日) 19:14 -

引用なし
パスワード
   ワードのVBAを使用するのがはじめてで、悪戦苦闘しています。

ユーザーフォームのテキストボックスに入力した文字をワード上に表示させるにはどのようにしたらいいのでしょうか?

ワードの表示場所は、先頭になります。
・ツリー全体表示

【624】Unknown
発言  jack3_as  - 09/4/28(火) 0:49 -

引用なし
パスワード
  
・ツリー全体表示

【623】Re:ダブルクリックでuserformを表示
回答  りる  - 09/4/26(日) 11:56 -

引用なし
パスワード
   hikka さん、こんにちわ。

>ワード文章上でダブルクリックしたらuserformが出るようにしたいのですが可能でしょか?
>excelでは
>Public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
>   UserForm1.Show
>End sub
>みたいにできればと思っているのですが。
>よろしくお願いします。

ダブルクリックのイベントを起こすにはclassを利用します。

該当のドキュメントに
挿入→クラスモジュール(初期ネームはClass1)
Class1に以下のイベントを記述(ヘルプのサンプルをそのまま記述しています)
'/////Start
Public WithEvents appWord As Word.Application

Private Sub appWord_WindowBeforeDoubleClick _
    (ByVal Sel As Selection, Cancel As Boolean)
  Dim intResponse As Integer
  intResponse = MsgBox("Selection = " & Sel & vbLf & vbLf _
    & "Continue with operation on this selection?", _
    vbYesNo)
  If intResponse = vbNo Then Cancel = True
End Sub
'/////End

Thisdocumentに以下を記述
'/////Start
Dim X As New Class1 'Classモジュール名に合わせる
'閉じるとき開放
Private Sub Document_Close()
 Set X = Nothing
End Sub
'イベントを起こす
Private Sub Document_Open()
 Set X.appWord = Word.Application
End Sub
'/////End

保存して閉じ、ドキュメントをマクロを有効にして開けばイベントが有効になります。
今回のイベントはサンプルをそのまま転記したのでメッセージが出ますが、そこにフォームを表示するコードを書いてみてください。
・ツリー全体表示

【622】ダブルクリックでuserformを表示
質問  hikka  - 09/4/20(月) 21:28 -

引用なし
パスワード
   ワード文章上でダブルクリックしたらuserformが出るようにしたいのですが可能でしょか?
excelでは
Public Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   UserForm1.Show
End sub
みたいにできればと思っているのですが。
よろしくお願いします。
・ツリー全体表示

14 / 45 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
207177
(SS)C-BOARD v3.8 is Free