
Excel 1セル当りの文字数が255文字を超える場合のADOからの取り扱いについて
前回質問した続きになるのですが、VBA(ADO)で自分自身のSheet間で抽出・コピー・ペーストを行っているのですが、抽出の際に、1セルの内容が255文字を超えている場合、エラーが発生します。
strSQL = "Select * from [sheet1$] where Col1 like '" & schStr & "%'"
Set RS = New ADODB.Recordset
RS.Open SQL, CN, adOpenStatic, adLockReadOnly
RS.Open でエラーが発生します。
私的には、255文字を超えているセルに関しては2行に分けるしかないのかなと考えております。
何か「こうすればいいよ」的なアドバイス頂けましたら幸いです。
よろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
1)ADOでExcelを読み込む場合、256文字以上は切り捨てられる事があります。
回避するには、8行目までのスキャンデータ中に
最大文字数のダミーデータを置くか、
http://support.microsoft.com/kb/189897/ja
レジストリを修正するか、などになります。
ただし、全レコードをスキャンするわけですから、
パフォーマンス的に問題ありそう。
2)また、開いているExcelBookにADOでアクセスすると
メモリリークが発生します。
大量のデータを繰り返し抽出する作業には向いていません。
#OSがVista以降になって改善されたかも。検証不足。
3)ADOとは関係ない部分で、2003では配列内文字列911文字まで
という制限があります。
http://support.microsoft.com/kb/818808/ja
255文字制限の場合は切り捨てられるだけで、エラーは発生しません。
仮に911文字制限に引っ掛かったとしても、CopyFromRecordsetメソッドの時に
エラーになります。
ですので
>RS.Open でエラーが発生します。
これは別の要因じゃないでしょうか。
いずれにしても、(2)の不具合がありますから、
自Bookに対するADOアクセスはあまりおすすめしません。
どうしてもADOを使いたい場合、
GetRowsメソッドで抽出結果データを配列に取得します。
その後、配列をLoopし行列をTransposeさせながら文字長をチェックし、
255文字超えるデータを別配列に退避して消去し、
後から1個ずつセルにセットさせたり、
またはvbTabとvbCrLfで配列要素を連結して文字列を作り、
DataObject経由でシートに貼り付けたりとか。
...などが考えられますが、
それよりも、Excelの基本機能を使った方が簡単です。
提示条件と同じ事をAdvancedFilterメソッドを使って
([データ]-[フィルタ]-[フィルタオプションの設定])
Sub Macro1()
Dim schStr As String '抽出条件
Dim ws As Worksheet '抽出条件書き出しシート
Dim r As Range '元データ範囲
With ActiveWorkbook
'元データ範囲取得
Set r = .Sheets("sheet1").UsedRange
Set ws = .Sheets.Add
schStr = InputBox("schStr")
'元データの見出し(Col1)をセット
ws.Range("A1").Value = r.Item(1).Value
'抽出条件をセット
ws.Range("A2").Value = schStr
'[フィルタオプションの設定]
r.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=ws.Range("A1:A2"), _
CopyToRange:=.Sheets.Add.Range("A1"), _
Unique:=False
End With
Set r = Nothing
Set ws = Nothing
End Sub
ActiveWorkbookにシートを2枚追加し、
1枚はAdvancedFilterの抽出条件書き出し用とします。
もう1枚に抽出結果を書き出します。
あくまでサンプルですから、既存シートへ抽出するようにも変更できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 16:55
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Excel(エクセル) エクセルの数式で教えてください。 1 2022/07/08 13:46
- Excel(エクセル) Excel VBAで、行の高さを、上下1文字分程度高くしたい 3 2023/04/23 00:17
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルの数式について教えてください。 7 2023/06/18 10:16
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/04/21 08:59
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
変数に256文字以上のテキストを格納したい
Visual Basic(VBA)
-
[Excel]ADODBでNull変換されてしまう
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
SQL: SELECT UNIONすると文字数制限があるようですべて取得できない
その他(データベース)
-
6
文字列型変数に1024を超えた文字列を代入した時に
Visual Basic(VBA)
-
7
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
8
ADOで複数のBookから抽出
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
DAOでフィールドのデータ型を変更するには?
Visual Basic(VBA)
-
11
テキスト型は何故255文字までなのでしょうか?
Excel(エクセル)
-
12
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
13
Access又はExcelで256項目を超えるCSVファイルをインポートしたい
Excel(エクセル)
-
14
エクセル ADO Filterでは一気に削除はできないのですか?
Visual Basic(VBA)
-
15
Access サブフォームでの選択行の取得
その他(データベース)
-
16
ウォッチ式の文字数制限について
Visual Basic(VBA)
-
17
EXCEL2000のマクロ(ADO)にてCSVデータ取得しようとしたら
その他(Microsoft Office)
-
18
EXCEL VBAでのCSVファイル読み込み、出力で困っています。
その他(Microsoft Office)
-
19
Excel csvから開くと上限文字数が異なる
その他(Microsoft Office)
-
20
エクセルVBAでエラー!
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PythonでのEXCELデータの処理に...
-
3桁コードの先頭文字を取り出す
-
PCサイトを携帯変換してくれるp...
-
ピクセル,dpiから容量(バイト...
-
VBAでプロシージャ間のデータを...
-
sort関数でひらがなとカタカナ...
-
改行文字保存時のゴミ
-
3バイト文字(UTF-8)をprintfで...
-
UTF-8で5~6バイトになる文字コ...
-
int型(2バイト)データの分割
-
linuxサーバーにUPしたCGIにネ...
-
「1TB」のHDDに日本語は何字入...
-
一行掲示板を改行が入る掲示板...
-
バイト境界とは
-
glibcをワイド文字=2バイト指定...
-
昇順に整列するプログラムにつ...
-
cgiログデータ入力
-
Perlでファイル名を変更したい...
-
ECUコードのCGIを編集す...
-
CSVから構造体へ代入
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
ListView重複データ削除
-
A1に100と入力した時点で 自動...
-
Excel VBA チェックツール
-
GUIDの重複
-
例外処理について Ruby
-
ExcelVBA エイルターオプション...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
エクセルシート名の制限を変更...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
stable diffusionのエラー
-
ピクセル,dpiから容量(バイト...
-
C++ Builderで文字列をバイトに...
-
エクセルVBA:日付データの変換...
-
Javaで日本語1文字のバイト数
おすすめ情報