Excel VBA質問箱 IV

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

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


5638 / 76732 ←次へ | 前へ→

【76702】Re:Excel2010 データインポートの際データがない時にファイルを閉じたい
発言  β  - 15/3/1(日) 6:49 -

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

了解です。

想像で書いているところもありますので当方の誤解あれば指摘願います。
また、書いただけで動かしてはいません。不具合あれば指摘願います。

・もとのコードの構成のまま、途中で処理をうちきらずに、続行させることもできますが
 全体の制御が見えにくくなると思いましたので、処理部分をサブプロシジャ
 (実行したかどうかの戻り値付)にして外だしにしました。

・かつ、Sheet1側、Sheet2側ともに、対象シートが異なるだけで、全く同じ処理でしたので
 一本化しました。

・コード中にもコメント入れましたが

  For x = 1 To Cells(Rows.Count, 10).End(xlUp).Row
    If Range("G" & x).Value = "数" Then
      Range("J" & x).Value = "送"
    End If
  Next

 ここだけ、それぞれのセルが、どのシートかの指定がありません。
 追加しておいてください。

Sub ボタン1_Click()
  Dim done As Boolean
  Dim bkB As Workbook
  Dim bkC As Workbook
  
  Application.ScreenUpdating = False
  
  Set bkB = Workbooks.Open("C:\東京\B.xls")
  Set bkC = Workbooks.Open("C:\東京\C.xls")
  
  'sheet1
  done = Proc(bkC.Worksheets("Sheet1"), bkB.Worksheets("Sheet1"))
  'sheet2
  done = Proc(bkC.Worksheets("Sheet2"), bkB.Worksheets("Sheet2"))
  
  bkB.Close SaveChanges:=False

  If done Then
    Application.DisplayAlerts = False
    bkC.SaveAs Filename:="\\サーバ名\フォルダ名1\共有フォルダ名2\" & bkC.Name
    Application.DisplayAlerts = True
  End If
  
  bkC.Close SaveChanges:=False
  
  Application.ScreenUpdating = True
  
  If done Then
    MsgBox "終わりました"
  Else
    MsgBox "処理すべきデータがありませんでした"
  End If
  
End Sub

Private Function Proc(sh1 As Worksheet, sh2 As Worksheet) As Boolean

  Dim r As Range
  Dim n As Long
  Dim i As Long, j As Long, k As Long
  Dim x As Long
  
  Set r = sh2.Range("A:I").Find("*", , xlValues, xlPart, xlByRows, xlPrevious)
  
  If r Is Nothing Then Exit Function
  
  n = Int((r.Row - 2) / 20)
  If n < 0 Then Exit Function
  
  Proc = True   '★実行された

  For i = 0 To n
    If i > 0 Then sh1.Range("A1:J33").Copy sh1.Cells(33 * i + 1, 1)
    For j = 1 To 9
      If j = 1 Then k = j Else k = j + 1
      sh1.Cells(33 * i + 12, k).Resize(20).Value = _
      sh2.Cells(20 * i + 2, j).Resize(20).Value
    Next
  Next
  
  '★以下の Cellsと2つのRange。どのシートでしょう? ここにも、sh1. なり sh2.なりを付けてください。
  
  For x = 1 To Cells(Rows.Count, 10).End(xlUp).Row
    If Range("G" & x).Value = "数" Then
      Range("J" & x).Value = "送"
    End If
  Next

End Function

259 hits

【76699】Excel2010 データインポートの際データがない時にファイルを閉じたい りえ 15/3/1(日) 4:58 質問[未読]
【76700】Re:Excel2010 データインポートの際データ... β 15/3/1(日) 6:16 発言[未読]
【76701】Re:Excel2010 データインポートの際データ... りえ 15/3/1(日) 6:45 発言[未読]
【76702】Re:Excel2010 データインポートの際データ... β 15/3/1(日) 6:49 発言[未読]
【76704】Re:Excel2010 データインポートの際データ... りえ 15/3/1(日) 7:36 発言[未読]
【76705】Re:Excel2010 データインポートの際データ... β 15/3/1(日) 7:40 発言[未読]
【76706】Re:Excel2010 データインポートの際データ... β 15/3/1(日) 7:56 発言[未読]
【76707】Re:Excel2010 データインポートの際データ... [名前なし]りえ 15/3/2(月) 12:34 お礼[未読]
【76703】Re:Excel2010 データインポートの際データ... β 15/3/1(日) 7:11 発言[未読]

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