
VB.NETでセルの1行を順番に読み取って、DBに登録(INSERT)していく処理を施しています。
Excelの中身を1行ずつ読み取るところまでは出来たのですが、そこからループでDBへINSERTさせるための書き方が分かりません。
【コード】
For Each v In xlSheet.Range("A4:V4", xlSheet.Range("A" & xlApp.Rows.Count).End(Excel.XlDirection.xlUp)).Value
Dim strINSERT As String
strINSERT = ""
strINSERT = strINSERT & "INSERT INTO "
strINSERT = strINSERT & "dbo.TBL_SHIPMENT "
strINSERT = strINSERT & "("
strINSERT = strINSERT & "[Division], " ’文字列型
strINSERT = strINSERT & "[Sales Org], " ’文字列型
strINSERT = strINSERT & "[Sales Office], " ’文字列型
strINSERT = strINSERT & "[Plant], " ’文字列型
strINSERT = strINSERT & "[Shipment Date], " ’date型
strINSERT = strINSERT & "[Material], " ’文字列型
strINSERT = strINSERT & "[Packlist #], " ’文字列型
strINSERT = strINSERT & "[Invoice Date], " 'date型
strINSERT = strINSERT & "[Fiscal Date], " '文字列型
strINSERT = strINSERT & "[Quantity], " 'decimal型
strINSERT = strINSERT & "[Invoice #], " '文字列型
strINSERT = strINSERT & "[Value USD], " 'decimal型
strINSERT = strINSERT & "[Unit Cost USD], " 'decimal型
strINSERT = strINSERT & "[Total Cost], " ’decimal型
strINSERT = strINSERT & "[Order Type], " '文字列型
strINSERT = strINSERT & "[Material Group], " '文字列型
strINSERT = strINSERT & "[Sold To Customer], " '文字列型
strINSERT = strINSERT & "[Customer Name]" '文字列型
strINSERT = strINSERT & ") "
strINSERT = strINSERT & "VALUES "
strINSERT = strINSERT & "("
’ === ここから分からない ============
お分かりのかた教えて頂けると幸いです。
OS:Windows10
ツール:Visual Studio2019
Ver:.NET Framework4.8
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
No.6です。
修正します。
>と『1行ずつ』ではなく『列方向に1セルずつ』の値を取得してますよね?
と『1行単位』ではなく『行方向に1列毎=1セルずつの値』をしゅとくしてますよね?
の方が適切でしたかね。
VBAであればA4~A列最終行をRange型で For Each してResizeするのはお分かりになるかと。
多分似たような事をすれば良いのではないでしょうか?
回答ありがとうございます。
確かに中身を確認すると行方向に1列毎の取得をしています。
行ごとに取得出来ているので、そこはイメージ通りですね。
そうですね。
一度やってみます。
No.6
- 回答日時:
>Excelの中身を1行ずつ読み取るところまでは出来たのですが
もし質問文にある
>For Each v In xlSheet.Range("A4:V4", xlSheet.Range("A" & xlApp.Rows.Count).End(Excel.XlDirection.xlUp)).Value
これの事だとしたら。
このコードって
・A4~A列最終行の値
・B4~B列最終行(A列基準)の値
・C4~ 以下同文
と『1行ずつ』ではなく『列方向に1セルずつ』の値を取得してますよね?
これって目的とあっているのでしょうか?
No.4
- 回答日時:
Object型は全てのクラスの基底クラスだからObject型なのはわかってる
Dim strINSERTの所でブレークポイント止めて
vかxlup.value所にマウス当てたら型が分るから
予想
xlup.valueがナントカrowcollectionでvがナントカrow
Dim strINSERTの所でブレークポイント止めて
vかxlup.value所にマウス当てたら型が分るから
→xlup.valueにカーソルを当てるとxlSheet.Range("A4:V4", xlSheet.Range("A" & xlApp.Rows.Count).End(Excel.XlDirection.xlUp)).Value = {Length=74228}
vにカーソルを当てるとNothingと出ます。
No.3
- 回答日時:
SQLserverだったらManegementStudio開いてinsertを実行することができると思うけどそれはやったん?
質問文の4行目以降を
strINSERT=成功したクエリ文
に置き換えて実行することは可能?
可能だとしたら繰り返し変数のvをクエリ文字列にする方法がわからんってこと?
VisualStudioでvの型見て文字列にする方法聞こうや
vの型教えてくれ
予想
strINSERT= strINSERT & v.cells[0].value
strINSERT= strINSERT & v.cells[1].value
みたいな感じで続くけど不正確
質問文の情報からvの型予想するのめんどい
質問文の4行目以降をstrINSERT=成功したクエリ文に置き換えて実行することは可能?
→可能です。以前は普通のfor文でDB登録出来ていたのですが、設計ミスで致命的なバグが見つかったので、今回の箇所を修正する運びになりました。
vの型教えてくれ
→オブジェクト型です。(for each文の上にDim v As Objectと宣言してます)
No.2
- 回答日時:
クエリーが組み立てられないのか?
VBAのコードが書けないのか?
さてどっちなんだろうね
丸投げとは言わんが・・・・
何が分からないノかを自分自身で理解しているのかな・・・
回答ありがとうございます。
SQL文(INSERT)の書き方自体は理解できているので、その辺は問題無いのですが、シンプルにコードが書けない(VBAのコードが書けない)状態です。
SQL文とVBの組み合わせで書くときにいつも混乱してしまうので、どう書けば動いてくれるのか(INSERT出来る書き方ができるのか?)でつまずいてしまいます。。。
No.1
- 回答日時:
「VB使いらしい汚えソースだな!EntityFramework使うか、せめてカラム名と値のKeyValuePairからInsert出来るサブ関数くらい作れや!(頑張っておられるのですね。
素晴らしいです。ところで、pgAdminなど他の対話環境からSQL文を実行してみて、正しいInsert文がどうなるか確認はされましたでしょうか?正しいInsert文がわかれば、strINSERTに何を入れれば良いかわかるかと思います。その上で、もし文字列中にシングルクォーテーションやダブルクォーテーションをエスケープする方法がわからないのであれば、新しく質問を建て直すといいと思います。御参考になれば、幸いです。)」「回答が来たと思えばふざけた訳わからねえ言葉をズラズラ並べやがって、こちとら分からんながらも必死で書いてそれでもわかんねえから質問してんだよこのタコ!分かるんだったら書き方を教えやがれこのタコ!(お忙しいところ回答ありがとうございます。すみません、pgAdminが何かすらよく分かっておりません。因みにDBはSQL Serverです。MsgBoxでちゃんと読み取れていることは確認できているのですが、、、。ご丁寧に教えて頂いておるのに、私の理解が乏しくすいません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Java htmlのinput type="date"をgetter setterはString型なのですか 1 2022/04/02 04:03
- Excel(エクセル) Excelの数字(文字列)合計について あるデータをダウンロードすると、数字データが全て文字列になっ 4 2022/09/26 21:21
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
Excelで3E8を3.00E+8にしない方...
-
sedなどで、特定の文字列の後の...
-
CStringの文字列検索&抜き出し...
-
エクセルで文字列の最大値を抽...
-
エクセルで文字列をtxtファイル...
-
aaa.bbb.ccc という、「ドット...
-
文字列からタブコードを取り除...
-
アクセスで特定の数字以外(複...
-
Excelで指数表現しないようにす...
-
PowerShellの暗号化&複合化
-
マクロでグラフを作成したい
-
Left関数とRight関数を合わせた...
-
vbsからバッチファイル実行時の...
-
LEFT関数で文字数を指定しない...
-
同一セル内に関数と文字列を同...
-
変数内に入った文字列の結合 UWSC
-
VBA2005 16進を2桁で表示したい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
bashスクリプトでの文字列から...
-
LEFT関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報