Excel VBA質問箱 IV

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

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


6061 / 13646 ツリー ←次へ | 前へ→

【47329】ご教授お願いします。 ポンズッポン 07/3/8(木) 2:59 質問[未読]
【47332】Re:ご教授お願いします。 ウッシ 07/3/8(木) 8:29 発言[未読]
【47335】Re:ご教授お願いします。 へっぽこ 07/3/8(木) 10:01 発言[未読]
【47367】早々のご教授ありがとうございます。 ポンズッポン 07/3/9(金) 4:30 質問[未読]
【47369】Re:早々のご教授ありがとうございます。 ウッシ 07/3/9(金) 9:25 発言[未読]
【47442】ウッシさんおはようございます。 ポンズッポン 07/3/10(土) 9:03 質問[未読]
【47445】Re:ウッシさんおはようございます。 ウッシ 07/3/10(土) 10:25 発言[未読]

【47329】ご教授お願いします。
質問  ポンズッポン  - 07/3/8(木) 2:59 -

引用なし
パスワード
    VBA初心者なのですが、教えていただきたいことがあります。
 日々同じようなデータを処理しているのですが、入力したデータを報告用にその日限りで扱うシートと、データベースのように蓄積する別のシートに同じデータを入力しています。データベース用のシートから入力したデータを報告用シートにコピー&ペーストしているのですが、何とかxlUp等を利用して新しく入力したデータだけを選択して(新しいデータ入力範囲がH55:H99として、その範囲を自動で取得して)、うまく報告用のシートにも自動で入力できる方法はないでしょうか?
 よろしくお願いします。

【47332】Re:ご教授お願いします。
発言  ウッシ  - 07/3/8(木) 8:29 -

引用なし
パスワード
   ▼ポンズッポン さん:

報告用シートに入力し終わったらボタンにマクロを登録して必要なデータを蓄積用の別シート
の最終行の下に転記するっていう方法もありますけど?

>新しいデータ入力範囲がH55:H99として
H55からがその日のデータと分かるフラグ(入力日とか)は有りますか?

どちらにしても両シートの詳細が分からないので、多分出来ますとしか言いようが無いですね。

【47335】Re:ご教授お願いします。
発言  へっぽこ  - 07/3/8(木) 10:01 -

引用なし
パスワード
   どっちかというと1日分の報告用シートに入力して、マクロで蓄積用シートに
も移すようにした方が楽な気がしますが?

> どちらにしても両シートの詳細が分からないので、多分出来ますとしか言いようが無いですね。

ですね。

【47367】早々のご教授ありがとうございます。
質問  ポンズッポン  - 07/3/9(金) 4:30 -

引用なし
パスワード
   ▼ウッシ さん:
>▼ポンズッポン さん:
>
>報告用シートに入力し終わったらボタンにマクロを登録して必要なデータを蓄積用の別シート
>の最終行の下に転記するっていう方法もありますけど?
>
>>新しいデータ入力範囲がH55:H99として
>H55からがその日のデータと分かるフラグ(入力日とか)は有りますか?
>
>どちらにしても両シートの詳細が分からないので、多分出来ますとしか言いようが無いですね。

 
 ウッシさん、早々のご教授ありがとうございます。
 現在は、データ入力用のシートから報告用のシートに、自動で転記出来るようにとセルを参照して転記している状態です。データ蓄積用のシートには手打ちで、データを入力する左横のセルに、その日の日付けを入力して貼り付けている状況です(H55:H99までデータを入力する時は、G55に日付を入力しています)。
 報告用シートに入力し終わったらボタンにマクロを登録して必要なデータを蓄積用の別シートの最終行の下に転記する方法をご教授いただけますか?
 よろしくお願いします。

【47369】Re:早々のご教授ありがとうございます。
発言  ウッシ  - 07/3/9(金) 9:25 -

引用なし
パスワード
   こんにちは

例えば今日データ蓄積用のシートの「H55:H99」までデータを入力したとすると、
明日は「H100〜」に入力するのですか?

データ蓄積用のシートをアクティブにして下記コードを実行して下さい。
追加されたシートのA、B列に計算式が表示されると思いますので、その部分をコピー
してここに貼り付けて提示して下さい。

Sub test()
  Dim hs     As Worksheet
  Dim r      As Range
  Dim s      As Range
  Dim aShName   As String
  Dim v()     As String
  Dim i      As Long
  Dim j      As Long
 
  aShName = ActiveSheet.Name '蓄積用シートをアクティブにして実行する事
  i = 1
  On Error Resume Next
  For Each hs In Worksheets
    If hs.Name <> aShName Then
      Set r = hs.Cells.SpecialCells(xlCellTypeFormulas)
      If Not r Is Nothing Then
        For Each s In r
          If InStr(s.Formula, aShName) > 0 Then
            ReDim Preserve v(1 To 1, 1 To i + 1)
            v(1, i) = hs.Name & "!" & s.Address
            v(1, i + 1) = "'" & s.Formula
            i = i + 2
          End If
        Next s
      End If
      Set r = Nothing
    End If
  Next
  On Error GoTo 0
  
  If i > 1 Then
    Application.ScreenUpdating = False
    Set hs = Worksheets.Add
    j = 1
    hs.Cells(j, "A").Value = "計算式セットセル"
    hs.Cells(j, "B").Value = "計算式"

    For i = 1 To UBound(v, 2) Step 2
      j = j + 1
      hs.Cells(j, "A").Value = v(1, i)
      hs.Cells(j, "B").Value = v(1, i + 1)
    Next i
    hs.Columns("A:B").AutoFit
    Set hs = Nothing
    Application.ScreenUpdating = True
  End If
  Erase v
      
End Sub

【47442】ウッシさんおはようございます。
質問  ポンズッポン  - 07/3/10(土) 9:03 -

引用なし
パスワード
    ウッシさんおはようございます。
 ウッシさんがおっしゃるように、データをH55:H99まで入力した翌日のデータは蓄積用のデータシートにはH100から入力を続けるのですが、検査したデータは一日ごとに前日のデータを消してから、また同じ所に翌日のデータを入力する形です。
 今回、ウッシさんに教えていただいたコードを、累積用のデータシート上で実行してみたのですが、追加されたシートもなく、蓄積用データシートにも計算式等は表示されませんでした。
 私がどのようにしたいのかを適切にお伝えすることが出来ていないだけだと思うのですが…。
 エクセルのbook自体を見ていただいたほうがはやいのでしょうか?現在教えていただいているコードを元にして何かこうすれば、ということがあればご教授お願いいたします。
 

【47445】Re:ウッシさんおはようございます。
発言  ウッシ  - 07/3/10(土) 10:25 -

引用なし
パスワード
   こんにちは

現状は計算式で参照しているのではないのですか?

蓄積用シートのH55:H99まで入力したデータは報告用シートのどの位置に転記してますか?
H55以下に入力する件数は毎日同じなのですか?

>H100から入力を続けるのですが、検査したデータは一日ごとに前日のデータを消してから
>また同じ所に翌日のデータを入力する形です。
意味が良く分かりません。
消すという事は蓄積しているとは言えなくなりますよ?

報告用シートのセルA6〜A45のデータを蓄積用シートのH55以下の最終行に追加する場合
のコードはこんな感じです。

Sub 例_1()
  Dim ts  As Worksheet
  Dim lstR As Long
  Set ts = Worksheets("蓄積用シート")
  lstR = ts.Range("H" & Rows.Count).End(xlUp).Row
  If lstR > 54 Then
    With Worksheets("報告用シート")
      ts.Cells(lstR + 1, "H").Resize(45).Value = .Range("A1:A45").Value
    End With
  End If
  Set ts = Nothing
End Sub

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