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

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

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

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

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

Q&A

解決済

2回答

2834閲覧

VBからExcelに出力する際に連動して別のセルに単語を出力したい

KEN_aivan

総合スコア14

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB.NET

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

0グッド

0クリップ

投稿2015/11/07 04:01

編集2015/11/09 02:23

VB.net(VS2013)から帳票のEXCEL出力を行っています。
DBから作業開始時刻と終了時刻を別のセルに出力しているのですが、そのどちらかが出力した際に別のセルに”~”を出力し、出力されるデータに作業時刻が存在しない場合は”~”を出力しないようにしてほしいと言われました。

申し訳ないのですが、どのようにすれば解決できるでしょうか。回答をお待ちしています

※追記※
今の内容としては
まず入力するためのセルや書式のレイアウトなどを済ませたほとんど空白のExcelを作成しています。

VB.NET

1
Private Const INT_ROW_SAGYO As Integer = 9 '[ 作業 ] Private Const INT_COL_SAGYO_TIME_FR As Integer = 21 '[ 作業時間(開始) ] Private Const INT_COL_SAGYO_TIME_TILDE As Integer = 25 '[ 作業時間(~) ] Private Const INT_COL_SAGYO_TIME_TO As Integer = 26 '[ 作業時間(終了) ]
そのExcelのセルの表示したい場所を指定し、 改頁やらのデータ処理のコードを挟んで、 ```VB.NET Private Function ClearHeaderDetail(ByVal sheet As ExcelWorksheet) As Boolean Try sheet.SetValue(INT_ROW_SAGYO, INT_COL_SAGYO_TIME_FR, Nothing) sheet.SetValue(INT_ROW_SAGYO, INT_COL_SAGYO_TIME_TILDE, Nothing) sheet.SetValue(INT_ROW_SAGYO, INT_COL_SAGYO_TIME_TO, Nothing)

改頁する際に残っているセルのデータをクリアするコードを挟んで、

VB.NET

1 Private Function SetDataHeaderDetail(ByVal sheet As ExcelWorksheet, ByRef dtDetail As DataTable, ByRef intRow As Integer) As Boolean 2 'クリア 3 Me.ClearHeaderDetail(sheet) 4 5 Try 6 sheet.SetValue(INT_ROW_SAGYO, INT_COL_SAGYO_TIME_FR, gclRep.ConvTimeStrToTimeKnj(dtDetail.Rows(intRow).Item(ITM_DNM_SGYSTJKN).ToString)) 7 sheet.SetValue(INT_ROW_SAGYO, INT_COL_SAGYO_TIME_TO, gclRep.ConvTimeStrToTimeKnj(dtDetail.Rows(intRow).Item(ITM_DNM_SGYEDJKN).ToString))

DBから引っ張ってきたデータを貼り付けています。
同じようにセルの場所を指定、セルのクリア処理を挟んで、DBを介さずにどちらかが出力された際に”~”が表示されるようにしたいです。
セルの場所設定やクリア処理はわかりますが、セット時のコードがいまいち判りません。

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

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

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

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

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

Tak1wa

2015/11/09 02:11

1.「~」を出力するセルの位置はどこですか?行番号は9ですよね。列番号は固定ですか?23~26のどれかだと思いますが。 2.もう1点、エクセル出力する際のファイルですが、VB.NET上で1からファイル生成しているのですか?それともテンプレートとなるエクセルファイルが存在しますか?
KEN_aivan

2015/11/09 02:24

情報の追記と一部間違っていた数値の変更を行いました
guest

回答2

0

ベストアンサー

やりかたはいくつかあると思いますが、こんなかんじでしょうか?

'STまたはEDに値があるか(空文字でないか)を判別 If gclRep.ConvTimeStrToTimeKnj(dtDetail.Rows(intRow).Item(ITM_DNM_SGYSTJKN).ToString) <> "" Or _ gclRep.ConvTimeStrToTimeKnj(dtDetail.Rows(intRow).Item(ITM_DNM_SGYEDJKN).ToString) <> "" Then '値がある場合、セルに"~"を出力 sheet.SetValue(INT_ROW_SAGYO, INT_COL_SAGYO_TIME_TILDE, "~") End If

DB取得値が""(空文字)の場合を条件式で判断し、条件を満たす場合にだけセルに"~"をセットします。

※机上で組んだロジックですのでそのまま動かなかったらすみません。

投稿2015/11/09 03:37

jawa

総合スコア3013

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

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

KEN_aivan

2015/11/11 05:12

ありがとうございます、参考にして無事OKもらえました。
guest

0

具体的な説明がないため適当なコードになりますが、無駄にややこしく考えていませんか?
「連動」などと考えずに頭の中のロジックをそのままコード化すれば良いだけではないですか?

lang

1Private Const ColumnOffset As Integer = 1 2Private xlSheet As WorkSheet 3Private Sub WriteRow(ByVal startTime As Date?, ByVal endTime As Date?, ByVal row As Integer) 4 Dim cells As Range = xlSheet.Cells 5 Dim c As Range 6 7 c = cells(row, ColumnOffset + 0) 8 c.Value2 = startTime 9 c = cells(row, ColumnOffset + 2) 10 c.Value2 = endTime 11 If startTime IsNot Nothing OrElse endTime IsNot Nothing Then 12 c = cells(row, ColumnOffset + 1) 13 c.Value2 = "〜" 14 End If 15 16 Marshal.FinalReleaseComObject(c) 17 Marshal.FinalReleaseComObject(cells) 18End Sub

投稿2015/11/07 08:32

htsign

総合スコア870

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

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

KEN_aivan

2015/11/09 02:02

ご指摘ありがとうございます 詳しい内容を追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問