
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
変数に256文字以上のテキストを格納したい
Visual Basic(VBA)
-
SQL: SELECT UNIONすると文字数制限があるようですべて取得できない
その他(データベース)
-
-
4
テキスト型は何故255文字までなのでしょうか?
Excel(エクセル)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
7
ウォッチ式の文字数制限について
Visual Basic(VBA)
-
8
[Excel]ADODBでNull変換されてしまう
Visual Basic(VBA)
-
9
コマンドボタンを押すたびに大きくなってしまう
Excel(エクセル)
-
10
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
11
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
12
Access又はExcelで256項目を超えるCSVファイルをインポートしたい
Excel(エクセル)
-
13
varchar型の入力できる最大文字数について
SQL Server
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
16
VBAを何回も作り直して、容量が増えた
Excel(エクセル)
-
17
EXCEL VBAでのCSVファイル読み込み、出力で困っています。
その他(Microsoft Office)
-
18
EXCEL2000のマクロ(ADO)にてCSVデータ取得しようとしたら
その他(Microsoft Office)
-
19
参照設定は2.8と6.0 6.1とどちらにチェッ
その他(Microsoft Office)
-
20
vbaでvbaProjectのパスワード解除する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
vba 正規表現について教えてく...
-
pythonでのローカルファイルか...
-
if関数とは?
-
プログラム言語
-
今のプログラミング言語
-
vba クリップボードクリアにつ...
-
itエンジニアに就職希望で未経...
-
Pythonのエラーメッセージをコ...
-
P2P地震速報のEEW APIの仕様書...
-
著作権法について
-
プログラミングについて
-
自作scratch アニメの商用利用
-
Geminiフォーム 画像生成で 人...
-
数学、プログラミング、物理、...
-
Python 3.12.2 か一番最新のパ...
-
MOVEコマンドでサブフォルダー...
-
AIがプログラムする時代のプロ...
-
pythonについて(初心者です)
-
pythonでhtmlファイルの指定文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
ListView重複データ削除
-
クロス集計
-
A1に100と入力した時点で 自動...
-
GUIDの重複
-
EXCEL VBA 並び替えについて
-
VB.netのTableAdapter.InsertQu...
-
マクロのフィルター機能を使って
-
VBAを使って複数条件からの合計...
-
VBAにて複数の重複データを取得...
-
ExcelVBAで、コメントのサイズ...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
stable diffusionのエラー
-
「1TB」のHDDに日本語は何字入...
-
ピクセル,dpiから容量(バイト...
-
Excel VBA メール作成について ...
おすすめ情報