- PR -

VBScriptでExcel

投稿者投稿内容
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-10-23 11:24
<環境>
OS Windows2000 Pro SP4
Excel Office2000 Sp3

現在、VBスクリプトでExcelのワークシートを操作するコードを
記載しています。行っていることは

1.excelオープン
2.セルのデータをチェック、要らない列、行の削除
3.タブ区切りで保存

以上です。


質問は、2.のデータチェックの所で、実際にデータが入っているのに、
空白としてみなされているようなのですが、どうしてこのような現象が
起こるのか分かりません。

以下は、実際に記載しているコードです。

<コード>
Option Explicit


Dim objExcel 'Excelアプリ
Dim objBook

Dim intRowCnt
Dim intColCnt
Dim strLipID
Dim strChkFlg

Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = False
ObjExcel.Workbooks.Open "C:\Test\Format.xls"

Set objBook = objExcel.ActiveWorkBook

objExcel.DisplayAlerts = False

strChkFlg = 0

With objBook.Sheets(1)
intRowCnt = 3

strLipID = .Cells(intRowCnt,1)


'データチェック
Do until strLipID = ""


if .Cells(intRowCnt,5) = "" or .Cells(intRowCnt,6) = "" Then
Msgbox strLipID & "error",vbOKOnly
strChkFlg = 1
Exit Do
End If


if .Cells(intRowCnt,7) = "" or .Cells(intRowCnt, = "" Then
Msgbox strLipID & "error",vbOKOnly
strChkFlg = 1
Exit Do
End If


if .Cells(intRowCnt,9) = "" or .Cells(intRowCnt,11) = "" Then
Msgbox strLipID & "error",vbOKOnly
strChkFlg = 1
Exit Do
End If

intRowCnt = intRowCnt + 1

Loop


If strChkFlg <> 1 Then
.Rows("1:2").Delete
.Columns("B:D").Delete

'タブ区切りで保存
objExcel.Workbooks(1).SaveAs "C:\Test\Test.txt",-4158

End If

End With


objBook.Close
objExcel.Quit

Set objBook = Nothing
Set objExcel = Nothing


以上、何かしらのヒント、アドバイスを頂ければ幸いでございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-23 11:49
引用:

鼻セレブさんの書き込み (2006-10-23 11:24) より:

質問は、2.のデータチェックの所で、実際にデータが入っているのに、空白としてみなされているようなのですが、どうしてこのような現象が起こるのか分かりません。


書いたとおりに実行されていると思いますよ。
何かしろ勘違いしている可能性が否めないです。

協力したいとは思うのですが、具体的にどのようなデータで試されているのかと、
どの位置のセルが、そうなってしまうのかを合わせて書いて頂かないと、検証ができないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-23 12:00
excelのvbaでやってみそ
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-10-23 12:07
じゃんぬねっとさん、ご返答ありがとうございます。

データの件、記載漏れ申し訳ございません。

下記、データに関して記載します。
1.ワークシートは、1枚。
2.セルのA3〜A9まで一意の識別コードが8桁(数字)で格納
3.セルのE3〜E9に日付(エクセルの書式は文字列に設定 YYYY/MM/DD)で格納
4.セルのF3〜F9に小数点含む数値データ(例 10.87etc)が格納(エクセルの書式に
 標準設定)

上記を踏まえて、実際に、E3〜E9、F3〜F9にデータが格納されていますが、
下記のIF文が通ってしまいます。

<コードより一部抜粋>
if Cells(3,5) = "" or Cells(3,6) = "" Then
Msgbox strLipID & "error",vbOKOnly
strChkFlg = 1
Exit Do
End If

ご指摘のとおり、私の勘違いの可能性が大だと思いますが、
どこがいけないのか検討がつかなくて・・・。
よろしくお願いします


ぷさいくろう
ぬし
会議室デビュー日: 2006/08/30
投稿数: 1034
投稿日時: 2006-10-23 12:25


[ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-10-23 16:55 ]
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2006-10-23 13:38
VBScript上では、例えば、下記のようなコード

セルが空白かどうかチェックしたい時
IF .Cells(3,5) = "" Then のように=""という表現は使用できない
んでしょうか?
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2006-10-23 13:53
#VB全般に疎いのですが、気になったので・・

引用:

鼻セレブさんの書き込み (2006-10-23 13:38) より:
VBScript上では、例えば、下記のようなコード

セルが空白かどうかチェックしたい時
IF .Cells(3,5) = "" Then のように=""という表現は使用できない
んでしょうか?



比較演算子と代入演算子は各々どう書くんだったか覚えてらっしゃいますか?手元のOfficeXPのVBScriptのHelp(VBSCRIP5.CHM)を読む限りは「Eval」か「Execute」で明示した方がいいような・・

#私は普段触らない言語だとすぐリファレンスを引くので(汗

[ メッセージ編集済み 編集者: shimix 編集日時 2006-10-23 13:59 ]
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-10-23 14:02
「strLipID の値は、どこで変化するのだろうか」
とか
「if .Cells(intRowCnt,7) = "" or .Cells(intRowCnt, = "" Then の1行はエラーにならないのだろうか」

といった疑問はありますが、それは転記ミスとして。

ぷさいくろうさんの言う通り、Excel の VBA に転記して、1 行ずつデバッグしてみてはいかがですか?

まずは、自分のソースコードを疑うべきかと思いますが。

スキルアップ/キャリアアップ(JOB@IT)