質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1134閲覧

VB.NET ClosedXMLでエクセルファイルにデータ書込みが途中までしかできていない

himaw

総合スコア6

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/08/06 08:35

編集2018/08/07 02:09

前提・実現したいこと

エクセルシートに項目(列)を追加して、データを入力する様にしたいのですが、900行くらいのうち、100行くらいで、「処理が完了しました」とメッセージが表示され、正常終了します。
データは900行くらいまであるので、最後まで入力されて正常終了になるはずなのですが、必ず同じ行まで入力された状態で、終了してしまいます。
環境は、VB.NET(Visual Studio v15.7.3)です。

追記
書込みは、sheet2のセルからsheet1のセルへ書込みをしています(書込みとは言わない?(貼り付け?))

ファイル保存のコードを追記しました。

追記
入力1(sheet1)です 入力2(sheet2)です

出力したいものです 現状出力されているものです

sheet1とsheet2でA列(品名)が一致したらsheet2のC列とD列をsheet1のB列とC列に書込みます。

発生している問題・エラーメッセージ

プログラム的には、正常終了していますが、保存されるファイルを見ると、データが途中までしか入力されていない状態になっている。

該当のソースコード

For i = 2 To MaxRow If sheet1.Cell(i, 1).Value = "" Then ElseIf sheet1.Cell(i, 1).Value = sheet2.Cell(i, 1).Value Then For j = 2 To MaxRow2 If sheet2.Cell(j, 1).Value = sheet1.Cell(i, 1).Value Then sheet1.Cell(i, 2).Value = sheet2.Cell(j, 3).Value sheet1.Cell(i, 3).Value = sheet2.Cell(j, 4).Value AA = sheet1.Cell(i, 1).Value BB = sheet2.Cell(j, 3).Value End If Next End If Next 'シート名を変更して保存 sheet1.Name = "sheet_test" 対象ファイル.SaveAs("C:\Users\xxxxxxx\TestBook.xlsx")

試したこと

最終行MaxRow,MaxRow2を共に900等に指定してみても結果は同じでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/08/06 08:40

そのソースコードにはExcelへのデータ書き込みもファイル出力も含まれていませんが。これでどうにかするというのは無理ゲーだと思います
imihito

2018/08/06 15:18

`j`のループ中の間、同じ箇所を書き換えていますが意図通りですか?入力・期待される出力の表の形式を示してください。
guest

回答2

0

自己解決

スミマセン、単純なミスでした。

sheet1のA列とsheet2のA列が完全に一致する前提で考えていましたが、実際には完全一致ではなく

ElseIf sheet1.Cell(i, 1).Value = sheet2.Cell(i, 1).Value Then
でfalseとなり、それ以降書き込みがおこなわれていませんでした。

上記の条件を単に
Else
としたら正常に書き込みが出来ました。

投稿2018/08/07 04:15

himaw

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どのような入力データで行われているのか分かりませんが、ただ単に条件が真にならずに処理されていないだけなのではないですか?
If文にElseを設けて、Traceを取ってみるなり、ステップ実行するなり、ご自身のプログラムがどのように動作しているか確認してみてはどうでしょうか?

投稿2018/08/06 22:51

YAmaGNZ

総合スコア10251

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問