
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)
-
[Excel]ADODBでNull変換されてしまう
Visual Basic(VBA)
-
-
4
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
5
SQL: SELECT UNIONすると文字数制限があるようですべて取得できない
その他(データベース)
-
6
テキスト型は何故255文字までなのでしょうか?
Excel(エクセル)
-
7
Access又はExcelで256項目を超えるCSVファイルをインポートしたい
Excel(エクセル)
-
8
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
9
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
10
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
11
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
12
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
13
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
14
テキストボックスのカーソル位置の取得・設定方法
Visual Basic(VBA)
-
15
文字列型変数に1024を超えた文字列を代入した時に
Visual Basic(VBA)
-
16
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
17
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
18
ウォッチ式の文字数制限について
Visual Basic(VBA)
-
19
ACCESSでパススルークエリにパラメータを使用したい
その他(データベース)
-
20
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewの特定列に入力さ...
-
Excel 1セル当りの文字数が2...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
機種依存文字をチェックしたい。
-
10Mバイトて文字数に すると何...
-
Excel VBA メール作成について ...
-
C#でのswitch文
-
sedコマンドで全ての2バイト文...
-
エクセルシート名の制限を変更...
-
COBOLでハーフバイト数値を読む...
-
【VB2005】テキストボックス内...
-
C言語 ファイル内のデータと入...
-
System.Collections.ArrayList ...
-
シフトJISの2バイト文字
-
URLは最高何文字まで可能なので...
-
検索窓の設置について
-
(C#)1バイトの正規表現
-
Javaで日本語1文字のバイト数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGridViewの特定列に入力さ...
-
Excel 1セル当りの文字数が2...
-
ListView重複データ削除
-
EXCEL VBA 並び替えについて
-
ExcelVBAで、コメントのサイズ...
-
VBAを使って複数条件からの合計...
-
VBA 最終行のひとつしたの行に...
-
javaのデータからヒストグラム...
-
VB.netのTableAdapter.InsertQu...
-
GUIDの重複
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
Excel VBA メール作成について ...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
printfの%eで指数部分の桁数を...
-
ビットスワップとバイトスワッ...
おすすめ情報