現在、ワードの表をアクセスに取り込む問題で苦戦しております。
ワードから表をコピペして、上記で教えていただいた方法でテーブルに取り込んでいたのですが
上記コードでは解決できない表が出てきました。
例えばエクセルに貼り付けると下記のような表です。
(数字で表していますが、実際は数字の中に文字列が入っています)
※1~4はワードでは同じセルに格納されているがエクセルでは行が分かれる。行数に変動有。
5~6はワードでは同じセルに格納されているがエクセルでは行が分かれる。行数変動なし。
7はワードでは同じセルに格納されているがエクセルでは1~4行目のセルの結合になっている。
※実際はこれと同じような表が縦に並んでいる状態だが
まとめて取り込みは厳しそうなので、せめて1データずつ取り込みたいと思っている。
1 5 7
2 6
3
4
●どのように取り込みたいか
①1,2,3,4,5,6,7を1つのレコードとして取り込みたいです。
その際、1~4、5~6を同じフィールドに入れたいのですが
1の文字列は複数可変のタブ区切りが入ってます…
また、1~4の行数も可変です。
余裕を持たせてフィールドを作成することはできますが、その場合、5番目以降をきちんと既定のフィールドに
格納する方法がわかりません・・
以上、わかりづらくてスミマセン。よろしくお願いいたします。
xmlに変換して確認したのですが、
で区切られている部分をフィールドに分けて今回の件がwordの中の、表の中身を抜き取ってアクセスにインポートしたいという作業になるので
一旦xmlに変換してそこから表の部分だけコピペというのも手間がかかるように思い、
やはりwordから表の部分を目視でコピペで完結したいのですが…VBAでの処理は難しいでしょうか…?
↑タグ部分がすっかり消えていたので書き直します
xmlに変換して確認したのですが、
で区切られている部分をフィールドに分けて
で区切られている部分をテーブルに分けたいです。
今回の件がwordの中の、表の中身を抜き取ってアクセスにインポートしたいという作業になるので
一旦xmlに変換してそこから表の部分だけコピペというのも手間がかかるように思い、
やはりwordから表の部分を目視でコピペで完結したいのですが…VBAでの処理は難しいでしょうか…?
ひょっとして、Wordの表データは、セル内で改行があるものですか。
だとすると、テキストボックスにコピペしたものでは、ちょっと難しいですね。
セル内改行とレコード区切りの改行の区別がつかないので。
下記にWordの表をエクセルに取りこむVBAコードのサンプルがあります。
【VBA】Word文書内の表をエクセルに取り込む | あじゅWeb
Tableオブジェクトを使って、Wordの表をExcelに貼り付ける:VBA/マクロ便利Tips - @IT
上記をAccess用改造すれば、ワードファイルのパスと何番目のテーブルかを指定すれば取り込むことは可能だと思います。
おっしゃるとおり、セル内にも改行があります…
やはりレコード区切りの改行とは区別がつかないのですね。ワードからエクセルにはうまく貼り付けられるから、何かしら区別の方法があるのかもと思っていました…
accessにはxmlからなんとか抜き出す方法を考えてみたいと思います。
wordからexcelのvbaも参考にさせていただきます。ありがとうございました。
めちゃくちゃめんどくさそうですがクリップボードのデータを直接取得してあれこれやればできないこともなさそうな感じはありました
クリップボードを操作する方法 (YU-TANG's MS-Access Discoveryさん)
※すでにページはないのでInternet Archive(web.archive.org)です
Wordでコピーした状態からだとHTMLDocumentとしてアクセスすることができ、テーブル構造を取得できるようです
ただし、TABとか改行とかはHTML用に変換されてしまうようなので内容を解析して再変換みたいなことをする必要がありそうです
ありがとうございます!!めんどくさそうということなので、時間を取って確認させていただきます。
ありがとうございました。
この件と絡み、別データになるのですが、改行を外して対応したいデータについて
列数が定数のデータがあり、以前教えていただいたVBAを修正して対応できないかと考えたのですが
うまくいきません。
以前hatena様に教えていただいたVBAです。
こちらの「UBound(a)」の部分を変数にして
下記修正してみたのですが、うまく動きません。
「インデックスが有効範囲にありません」とエラー。
スミマセン。教えていただけると助かります。
あ、ちなみにiUpをvariantにしたら、引数で「UBound(a)」としても対応できますでしょうか。
VBAの初歩的な質問で恐れ入ります…
VBA記述的な話
a = Split(s, vbNewLine)
は改行で区切りにした配列なのでUBound(a)
は行数=レコード数ですね。列数に対応しているのはUBound(Datas)
のほうですa
はAddData()
内でDim a
した変数なのでデータ追加_Click()
では使えないです。やるとすればのように定数を宣言してあげる形でしょうか。このくらいならわざわざ宣言しなくてもいいですが
個人的な感想だと
UBound(Datas)
をiUp
に置き換えるメリットは感じないですね。汎用性が落ちる分やらなくていいんじゃないかなと>列数に対応しているのはUBound(Datas)のほうです
本当ですね…すみません。
>aはAddData()内でDim aした変数なのでデータ追加_Click()では使えないです。
なるほど…
取り込みデータにいくつか種類があり、ボタンを分けているのですが、
全部同じ汎用関数で行けるかなとかんがえていました
分けた方が良さそうですね、勉強になりました。ありがとうございます。
列数が固定でも、例えば最後の列のセルや1列目のセルに改行がある場合、どの改行がレコード区切りなのか判断つかないので、無理ですね。例えば1列目がIDとかで改行がないということが保障されているなら方法はありそうです。
紛らわしくてすみません。
これは前回質問したものとは別データになり、
セル内に改行が存在しないデータになります。
セル内には改行が存在しないのですが、同じレコード内の列の区切りで途中で改行が入っているので
一括で改行を外して、固定の列数でレコードを区切りたく思っています。
いろんな種類のデータがあり、明確に分別できるのでそのように取り扱いたく…紛らわしくてすみません。
ちょっと、どのようなデータなのかこの説明だけではわかりません。
「レコード内の列の区切りで途中で改行が入っている」というのが「セル内に改行が入っている」とどう違うのか分かりません。
ワードの表ではないのですか。
ワードの表ならば、前の回答で紹介した下記のリンク先の方法で
エクセルのセルに代入する部分を、テーブルに代入するように書き換えるだけです。
【VBA】Word文書内の表をエクセルに取り込む | あじゅWeb
これが比較的シンプルで確実な方法だと思います。
単純に1データ1行のテキストデータですかね?レコード(列数)という情報なしの
ワードの表データではなく、別のテキストデータということなのかな。
だとしたら、まったく別の質問になるので新規に質問を立ててもらった方がいいですね。
あとから見た人にとっても利用しやしすですので。
スミマセン!同じくワードの表からテキストボックスへのコピペなのですが、セル内に改行がなく、レコード途中で改行があったので、下記加工して、1行のテキストのようにして扱っていました。そのことを書けばよかったです。
新規スレ立てようか悩んだんですが、わかりづらくなってしまい申し訳ありません。
上記の上、教えていただいたコードを部分的に修正してうまく動きました!
他の方が参考にされるかもしれないので載せておきます。
大変助かりました。ありがとうございました!
ごめんなさい…
VBAに間違いがあります。修正します。