
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
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
7
テキスト型は何故255文字までなのでしょうか?
Excel(エクセル)
-
8
文字列型変数に1024を超えた文字列を代入した時に
Visual Basic(VBA)
-
9
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
10
Access又はExcelで256項目を超えるCSVファイルをインポートしたい
Excel(エクセル)
-
11
Excel csvから開くと上限文字数が異なる
その他(Microsoft Office)
-
12
EXCEL VBAでのCSVファイル読み込み、出力で困っています。
その他(Microsoft Office)
-
13
EXCEL2000のマクロ(ADO)にてCSVデータ取得しようとしたら
その他(Microsoft Office)
-
14
エクセルVBAでエラー!
Excel(エクセル)
-
15
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
16
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
17
ADOで複数のBookから抽出
Visual Basic(VBA)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
20
DAOでフィールドのデータ型を変更するには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewの特定列に入力さ...
-
Excel 1セル当りの文字数が2...
-
COBOLのCOMP形式について
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
'dataType' 引数を Null にする...
-
perlプログラミング 空白行削除
-
文字列の最後の一字を削除
-
ビットからバイトへの変換
-
System.Collections.ArrayList ...
-
ブラウザ間でCookieを共有する...
-
Sys::Syslogモジュールを利用し...
-
ワイド文字のバイト数が取得で...
-
Rstudioによるテキストマイニン...
-
micropythonコード 修正
-
文字の幅について
-
html→aspxへのタグ変換方法
-
printfの%eで指数部分の桁数を...
-
0.5バイトづつ読み込みたいので...
-
構造体のソートの方法について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataGridViewの特定列に入力さ...
-
Excel 1セル当りの文字数が2...
-
GUIDの重複
-
ListView重複データ削除
-
VBAにて複数の重複データを取得...
-
A1に100と入力した時点で 自動...
-
クロス集計
-
データベースを公開して任意に...
-
ExcelVBAで、コメントのサイズ...
-
PythonでのEXCELデータの処理に...
-
excel vbaについて
-
VBA 最終行のひとつしたの行に...
-
会社でIEを開いて入力するデー...
-
EXCEL VBA 並び替えについて
-
javaのデータからヒストグラム...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
おすすめ情報