Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4470 / 13645 ツリー ←次へ | 前へ→

【56437】同じ値が出力先にある場合の条件式 roxy 08/6/17(火) 15:43 質問[未読]
【56439】Re:同じ値が出力先にある場合の条件式 ひげくま 08/6/17(火) 16:14 発言[未読]
【56441】Re:同じ値が出力先にある場合の条件式 roxy 08/6/17(火) 16:31 発言[未読]
【56442】Re:同じ値が出力先にある場合の条件式 ひげくま 08/6/17(火) 16:40 発言[未読]
【56443】Re:同じ値が出力先にある場合の条件式 roxy 08/6/17(火) 16:47 発言[未読]
【56444】Re:同じ値が出力先にある場合の条件式 ひげくま 08/6/17(火) 16:58 回答[未読]
【56447】Re:同じ値が出力先にある場合の条件式 roxy 08/6/17(火) 17:09 発言[未読]
【56451】Re:同じ値が出力先にある場合の条件式 ひげくま 08/6/17(火) 18:54 発言[未読]
【56455】Re:同じ値が出力先にある場合の条件式 roxy 08/6/18(水) 9:58 発言[未読]
【56456】Re:同じ値が出力先にある場合の条件式 ひげくま 08/6/18(水) 10:31 発言[未読]
【56445】Re:同じ値が出力先にある場合の条件式 Yuki 08/6/17(火) 17:04 発言[未読]
【56446】Re:同じ値が出力先にある場合の条件式 roxy 08/6/17(火) 17:06 発言[未読]
【56448】Re:同じ値が出力先にある場合の条件式 Yuki 08/6/17(火) 17:17 発言[未読]
【56449】Re:同じ値が出力先にある場合の条件式 roxy 08/6/17(火) 17:30 発言[未読]

【56437】同じ値が出力先にある場合の条件式
質問  roxy  - 08/6/17(火) 15:43 -

引用なし
パスワード
   あるDBから、条件を絞って”出力”という名前のシートに値を出します。
しかし、出力先のシートに既に同じ値があったら値は出しません。

…というわけで、「しかし」以降がうまくいきません。
一先ず記述したものを貼ってみます。どこにどのように記載したらいいの
か教ええいただけたらと思います。
ちなみに、DBから出力した値がAで、既にシートにある値もAだったら…という
考えで教えて欲しいです。
説明が難しくて申し訳ないです。

Private Sub CommandButton1_Click()
'他のエクセルファイルを開いて情報を取得する
'ポインタを砂時計にする
  MousePointer = 11
'エクセルオブジェクトの新しいインスタンスを作成
  Set IRAIxl = CreateObject("Excel.Application")
'ファイル名を指定してワークブックを開く
  Set IRAIwb = IRAIxl.Workbooks.Open(Filename:=DAICYO_PATH, UpdateLinks:=0, ReadOnly:=True)
  Set IRAIws = IRAIwb.Sheets(DATA_SHEET_NAME)


  '出力に出す
  Worksheets("出力").Cells(1, 1).Value = "削除依頼一覧  ユーザ納品から6日経過したもの"
  Worksheets("出力").Cells(2, 1).Value = "作成日:" & Date
  Worksheets("出力").Cells(3, 1).Value = ""


'納品管理台帳の番号がなくなるまで
  Y = I_START_Y
'出力は6行目から開始
 
'出力開始は5行目から(新規入力箇所指定)

 Dim Kaishi As Range
 Set Kaishi = Worksheets("出力").Range("A65536").End(xlUp).Offset(1)
  
  Do Until IRAIws.Cells(Y, I_KEY_x).Value = ""
    If Trim(IRAIws.Cells(Y, I_TANTODAY_x).Value) = "" And _
      Trim(IRAIws.Cells(Y, I_UNOHINJISEKI_x).Value) <> "" Then
      If IRAIws.Cells(Y, I_UNOHINJISEKI_x).Value < Date - 6 Then
     

  '出力に出す
      
       Kaishi = Trim(IRAIws.Cells(Y, I_HYOKIKBN_x).Value)     '表記区分
       Kaishi.Offset(, 1) = Trim(IRAIws.Cells(Y, I_NO_x).Value) & "-" & Trim(IRAIws.Cells(Y, I_EDA_x).Value)     '案件番号と枝番
                                  
       Kaishi.Offset(, 2) = Trim(IRAIws.Cells(Y, I_ANKEN_x).Value)      '案件名
       Kaishi.Offset(, 3) = Trim(IRAIws.Cells(Y, I_TYUSYUTUTANTO_x).Value)  '抽出担当名
       Kaishi.Offset(, 4) = Trim(IRAIws.Cells(Y, I_HOWTO_x).Value)      '納品方法
       Kaishi.Offset(, 5) = Trim(IRAIws.Cells(Y, I_KANRYOU_x).Value)     '完了日
       Kaishi.Offset(, 6) = Trim(IRAIws.Cells(Y, I_UNOHINJISEKI_x).Value)  '納品日
       
          Set Kaishi = Kaishi.Offset(1)


      End If
      
    End If
   End If
    
    Y = Y + 1
   
    
    DoEvents
  Loop
 

'ファイルのクローズ
  IRAIwb.Close saveChanges:=False

  
  MsgBox ("出力しました")
End Sub

【56439】Re:同じ値が出力先にある場合の条件式
発言  ひげくま  - 08/6/17(火) 16:14 -

引用なし
パスワード
   あまりよく見ていなくて、申し訳ありませんが、

出力する前に同じ値があるかどうかチェックすれば良いだけだと思うのですが・・・

> ちなみに、DBから出力した値がAで、既にシートにある値もAだったら…という
考えで教えて欲しいです。

「DBから出力しようとしてる(出力する前の)値」と「既にシートにある値」を比べるんじゃないんですか?
「DBから出力した(出力した後の)値」と「既にシートにある値」を比べるのですか?

【56441】Re:同じ値が出力先にある場合の条件式
発言  roxy  - 08/6/17(火) 16:31 -

引用なし
パスワード
   >「DBから出力した(出力した後の)値」と「既にシートにある値」を比べるのですか?

そうです。

んーー記述が、どこにどう書けば分からないんです。
その比較判定の記述箇所がどうしてもエラーになってしまいます。

【56442】Re:同じ値が出力先にある場合の条件式
発言  ひげくま  - 08/6/17(火) 16:40 -

引用なし
パスワード
   >>「DBから出力した(出力した後の)値」と「既にシートにある値」を比べるのですか?
>そうです。

同じだったら出力しないんですよね?
出力する前に比較して、同じだったら出力しないようにすれば良いと思うのですが、
なぜ出力してしまってから比較したいのでしょうか?

>その比較判定の記述箇所がどうしてもエラーになってしまいます。

どのように記述して、どんなエラーが出るのでしょうか?

【56443】Re:同じ値が出力先にある場合の条件式
発言  roxy  - 08/6/17(火) 16:47 -

引用なし
パスワード
   >なぜ出力してしまってから比較したいのでしょうか?

出力前に比較記述をしてます。
以下、コピペしますので、ご指摘くだされば・・・。

矢印の箇所が記述箇所です。
エラーメッセージは”End Ifに対するIfがない”というものです。

Private Sub CommandButton1_Click()
'他のエクセルファイルを開いて情報を取得する
'ポインタを砂時計にする
  MousePointer = 11
'エクセルオブジェクトの新しいインスタンスを作成
  Set IRAIxl = CreateObject("Excel.Application")
'ファイル名を指定してワークブックを開く
  Set IRAIwb = IRAIxl.Workbooks.Open(Filename:=DAICYO_PATH, UpdateLinks:=0, ReadOnly:=True)
  Set IRAIws = IRAIwb.Sheets(DATA_SHEET_NAME)


  '出力に出す
  Worksheets("出力").Cells(1, 1).Value = "削除依頼一覧  ユーザ納品から6日経過したもの"
  Worksheets("出力").Cells(2, 1).Value = "作成日:" & Date
  Worksheets("出力").Cells(3, 1).Value = ""


'納品管理台帳の番号がなくなるまで
  Y = I_START_Y
⇒'出力は6行目から開始
  AAAA = 6
 
'出力開始は6行目から(新規入力箇所指定)

 Dim Kaishi As Range
 Set Kaishi = Worksheets("出力").Range("A65536").End(xlUp).Offset(1)
  
  Do Until IRAIws.Cells(Y, I_KEY_x).Value = ""
    If Trim(IRAIws.Cells(Y, I_TANTODAY_x).Value) = "" And _
      Trim(IRAIws.Cells(Y, I_UNOHINJISEKI_x).Value) <> "" Then
      If IRAIws.Cells(Y, I_UNOHINJISEKI_x).Value < Date - 6 Then
     ⇒ Do Until Worksheets("出力").Cells(AAAA, 1).Value = ""
     ⇒ If Worksheets("出力").Cells(AAAA, 2).Value <> Trim(IRAIws.Cells(Y, I_NO_x).Value) & "-" & Trim(IRAIws.Cells(Y, I_EDA_x).Value) Then
  '出力に出す
      
       Kaishi = Trim(IRAIws.Cells(Y, I_HYOKIKBN_x).Value)     '表記区分
       Kaishi.Offset(, 1) = Trim(IRAIws.Cells(Y, I_NO_x).Value) & "-" & Trim(IRAIws.Cells(Y, I_EDA_x).Value)     '案件番号と枝番
                                  
       Kaishi.Offset(, 2) = Trim(IRAIws.Cells(Y, I_ANKEN_x).Value)      '案件名
       Kaishi.Offset(, 3) = Trim(IRAIws.Cells(Y, I_TYUSYUTUTANTO_x).Value)  '抽出担当名
       Kaishi.Offset(, 4) = Trim(IRAIws.Cells(Y, I_HOWTO_x).Value)      '納品方法
       Kaishi.Offset(, 5) = Trim(IRAIws.Cells(Y, I_KANRYOU_x).Value)     '完了日
       Kaishi.Offset(, 6) = Trim(IRAIws.Cells(Y, I_UNOHINJISEKI_x).Value)  '納品日
       
          Set Kaishi = Kaishi.Offset(1)
         

      End If
      
      End If
   
    End If
  
    Y = Y + 1
     
    
  ⇒  AAAA = AAAA + 1


    DoEvents
  Loop
⇒ DoEvents
⇒ Loop
 

'ファイルのクローズ
  IRAIwb.Close saveChanges:=False


  MsgBox ("出力しました")
End Sub

【56444】Re:同じ値が出力先にある場合の条件式
回答  ひげくま  - 08/6/17(火) 16:58 -

引用なし
パスワード
   >矢印の箇所が記述箇所です。
>エラーメッセージは”End Ifに対するIfがない”というものです。

そのままですね。
If と End If の対応が変だということです。
ちゃんと確かめてください。

ちなみに、Do Loop や For Next の関係が変な場合も考えられます。
というか、今回の場合は Do Loop が変なんですけどね。

きちんとタブでインデントすれば、すぐに解る問題です。

【56445】Re:同じ値が出力先にある場合の条件式
発言  Yuki  - 08/6/17(火) 17:04 -

引用なし
パスワード
   ▼roxy さん:
>>「DBから出力した(出力した後の)値」と「既にシートにある値」を比べるのですか?
>
>そうです。
>
同じであっても、違っていてもデータが書き換えられてもよいのでは。

A --> A でも A は変わらないですよね。

意味不明かな

【56446】Re:同じ値が出力先にある場合の条件式
発言  roxy  - 08/6/17(火) 17:06 -

引用なし
パスワード
   ▼Yuki さん:
>▼roxy さん:
>>>「DBから出力した(出力した後の)値」と「既にシートにある値」を比べるのですか?
>>
>>そうです。
>>
>同じであっても、違っていてもデータが書き換えられてもよいのでは。
>
>A --> A でも A は変わらないですよね。
>
>意味不明かな

ごめんなさい、よく分からないです。。
どのような意味ですか?
ちなみに、上書きにならないように、前回出力したあとに
続くように値はシートに出ます。

【56447】Re:同じ値が出力先にある場合の条件式
発言  roxy  - 08/6/17(火) 17:09 -

引用なし
パスワード
   ▼ひげくま さん:
>>矢印の箇所が記述箇所です。
>>エラーメッセージは”End Ifに対するIfがない”というものです。
>
>そのままですね。
>If と End If の対応が変だということです。
>ちゃんと確かめてください。

すみません、分からないです。
どこがどのようになのでしょうか。。
>
>ちなみに、Do Loop や For Next の関係が変な場合も考えられます。
>というか、今回の場合は Do Loop が変なんですけどね。
>
どういう事ですか??

>きちんとタブでインデントすれば、すぐに解る問題です。
タブでインデント??
場所が良くないということでしょうか?

【56448】Re:同じ値が出力先にある場合の条件式
発言  Yuki  - 08/6/17(火) 17:17 -

引用なし
パスワード
   ▼roxy さん:

>ちなみに、上書きにならないように、前回出力したあとに
>続くように値はシートに出ます。

A という元データに A というデータを上書きしても同じですよね。
という意味です。
上書きしなくても同じデータですよね。

【56449】Re:同じ値が出力先にある場合の条件式
発言  roxy  - 08/6/17(火) 17:30 -

引用なし
パスワード
   ▼Yuki さん:
>▼roxy さん:
>
>>ちなみに、上書きにならないように、前回出力したあとに
>>続くように値はシートに出ます。
>
>A という元データに A というデータを上書きしても同じですよね。
>という意味です。
>上書きしなくても同じデータですよね。

上書き?
上書きにはなりません。

A
B
C
と出力してあるシートに、
A
B
C
D
E
F
と続いて出力します。
しかし、
A
B
C
のあとに
またAが来ないようにしたいのです。

【56451】Re:同じ値が出力先にある場合の条件式
発言  ひげくま  - 08/6/17(火) 18:54 -

引用なし
パスワード
   >>If と End If の対応が変だということです。
>>ちゃんと確かめてください。
>
>すみません、分からないです。
>どこがどのようになのでしょうか。。
>>
>>ちなみに、Do Loop や For Next の関係が変な場合も考えられます。
>>というか、今回の場合は Do Loop が変なんですけどね。
>>
>どういう事ですか??

If 〜〜〜
Do 〜〜〜
End If
Loop

こういう構造がダメであることは解りますよね?

>タブでインデント??
>場所が良くないということでしょうか?

インデントは難しいことじゃないだけに、説明すると逆に長くなりそうなので、まずはご自分でしらべてください。

【56455】Re:同じ値が出力先にある場合の条件式
発言  roxy  - 08/6/18(水) 9:58 -

引用なし
パスワード
   ▼ひげくま さん:
>>>If と End If の対応が変だということです。
>>>ちゃんと確かめてください。
>>
>>すみません、分からないです。
>>どこがどのようになのでしょうか。。
>>>
>>>ちなみに、Do Loop や For Next の関係が変な場合も考えられます。
>>>というか、今回の場合は Do Loop が変なんですけどね。
>>>
>>どういう事ですか??
>
>If 〜〜〜
>Do 〜〜〜
>End If
>Loop
>
>こういう構造がダメであることは解りますよね?

なるほど。。。確かに。
ちょっと検証してみます。
どうしたらうまくいくでしょう…。

【56456】Re:同じ値が出力先にある場合の条件式
発言  ひげくま  - 08/6/18(水) 10:31 -

引用なし
パスワード
   >>If 〜〜〜
>>Do 〜〜〜
>>End If
>>Loop
>>
>>こういう構造がダメであることは解りますよね?
>
>なるほど。。。確かに。
>ちょっと検証してみます。
>どうしたらうまくいくでしょう…。

ダメなところをダメじゃなくしましょう。

「ちょっと検証してみます」ということは、まだ何もしていないということですよね?
その段階で「どうしたらうまくいくでしょう」という質問はどうかと思いますよ。

4470 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free