• 締切済み

シートの内容コピーマクロについて

エクセルシートに作成したシートのデーターを、別シートに自動で反映させてたいと思っております。 該当する文字を入力するだけでマクロを使用してその下にある数字を全てコピーできるようしたいと思っております。 添付シートを参照して頂ければと思いますが、シート1の元データーから、別シート2に文字を返して、その下にある文字が自動で反映できるような仕組みを構築したいと考えております。 添付は抜粋で元データーは400件以上あり、シート1の基本となる大元は、縦軸が800セル  横軸(時間軸)で、305セルまで使用しており、そこに順不同で品目と、下の数値が違うデータが入力させれております。 そこで、品目だけ入力すればその下の数字が自動で反映出来ればと思っております。 下記マクロですと、シート1の元データーがシート2へ全てが反映させれません。 何処を変更すればよろしいのでしょうか? ----------------------------------------------------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim cnt As Long, c As Range, r As Range, myRng As Range, wS As Worksheet Set wS = Worksheets("Sheet1") If Target.Count = 1 Then If Target <> "" Then Set c = wS.Cells.Find(what:=Target, LookIn:=xlValues, lookat:=xlWhole) If Not c Is Nothing Then Set myRng = c.CurrentRegion For Each r In myRng cnt = cnt + 1 If r = c Then Exit For Next r If Target.Column - cnt + 1 > 0 Then myRng.Copy Target.Offset(, -cnt + 1) Else MsgBox "左側列数が不足です。" Exit Sub End If Else MsgBox "該当データなし" With Target .Select .Value = "" End With Exit Sub End If End If End If End Sub 'この行まで ---------------------------------------------------------------------------------------------------- トラックの搬入時間管理の為、タイムリーな処理が必要な為、お詳しい方のお知恵をお借りできればと思いいます。 お忙しい所申し訳ありませんが、どなたかお力添えをよろしくお願いいたします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

#1です。 勘違いだったらすみません。 Set myRng = c.CurrentRegion For Each r In myRng cnt = cnt + 1 If r = c Then Exit For Next r の部分は、cntは、CurrentRegionの「セル」数を数えていますよね。 >myRng.Copy Target.Offset(, -cnt + 1)に、(それもOffsetの「列の部分」に)cntが使われているのはなぜ?。どういう意味ですか?。 ーー 私の確認テストは、下記です。 Range("B3:D6")に勝手なデータを入れて Sub test01() Set myrng = Range("B3").CurrentRegion For Each r In myrng cnt = cnt + 1 Next r ’ここまでは質問のコード MsgBox cnt MsgBox myrng.Count MsgBox myrng.Columns.Count End Sub を実行したら cntは12、 myrng.Countは12、myrng.Columns.Count(CurrentRegionの列数)は3になりました。 このmyrng.Columns.Countを使うべきではないのでしょうか? For Each r In myrng cnt = cnt + 1 Next r の部分はmyrng.Countで済むのでは。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#1です。補足していただいて、ありがとうございました。 しかしよくわかりませんでした。 ーー Sheet1 りんご  K5セル。こういうK5セルと表現するほうがわかりやすい。A1形式。     セル番地の表現に、R1CI方式があるのは知ってますが、あまり使われない。この質問には両者(A1形式とR1CI方式的表現)の表現が混じっていてわかりにくいと思う。      エクセルやVBAの解説書でもあまり見かけないでしょう。      これは場合によって、変わるので、人間が、シートのセルをSelectionしするのですね。 行範囲について 1+5=6行から5+13=18行にわたってデータがあるのですね。 列範囲について -15とは?K列は第11列目なので左へー15とできないのでは? 色分け 「値」の取得や代入では不十分なのですね。 Sheet2 B23が貼り付けの起点(左上隅セル)ですね?<--「横B、縦23のセルに」から >りんごと記入したら りんごと記入して?セルの値に「りんご」をコピー貼り付けして? >縦B、横23 これは毎回(りんご以外の時も)、固定位置ですか?。 >その下の その下のB24を起点にして、その下部(右方向+下方向に)にのこと? ーー 以上は参考にしてください。回答には至れないのですみません。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#Iです。質問と画像を、もう一度見直してみると 「りんご」は実際はトラック番号や運転手名か。 その下の1が並んでいるセル範囲のデータは(参考までに)どんなデータなのか。 もし書いてあれば、読者が類推できるかも。 この塊のデータ(凸凹のセル範囲)をどう見分けるのか?スペースが連続データの最右や最下のセルにあれば、情報(りんごのデータ)の境界ということか。 ーー セル範囲は、たとえば Sub test01() Range("B4").CurrentRegion.Select End Sub (CTRL+SHIFT+*の操作に当たる) を実行すると、B4:F7(私のテスト例)の長方形のセル範囲を選んでしまって、凸凹はお構いなしである。 これをSheet2(1?)の所定のセル範囲に張り付けては(スペースのセルが混じる)ダメなのか? そこから空白セルを、一発の操作で(VBAでもコードを書ける)すべて選択できるが それでは役立たないのかな。 ーー CurrentRegion.Select の各列、各行で下からEnd(xlUp)右からEnd(xlToLeft)で終わりのセル位置を調べないといけないと思う。 例で「りんご」以外の関連データが1スペースでも開けて迫ってきているのか。 こういうことを説明しないと、質問の趣旨が伝わらないのではないか。 会社の業務の秘密を出したくないとしても限度かある。うまく他の例にでも置き換えて説明すること。この頃こういうのが多くて質問の意味がわかりにくい。読者の立場にもなってください。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.4

N03 訂正 myRng.CurrentRegion.Select ↓ myRng.Select でした。

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.3

No2です。 For Each r In myRngの部分が列数を求めてるのでしたら myRng.Columns.Count で取得できます。 また、左上の行と列は myRng.Cells(1).Row myRng.Cells(1).Column で取得できます。 コピーしたい範囲が適切に選択されているかを調べてみたいのでしたら myRng.CurrentRegion.Select を入れてそこでで止めてみたらいかがでしょう

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1624/2466)
回答No.2

画像ではデータが一塊のように見えるので、単純にCurrentRegion部分をコピーするだけではだめなんですか?

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問の内容がよく伝わらない。 補足希望。 ーー 大きな処理は>トラックの搬入時間管理の為、らしいが画像のシート例の内容が抽象的すぎて、どこが注目点かよくわからない。 わたしの持論では、画像というのは、うまい説明者が説明しないと、趣旨はよく伝わらないと思う。画像が見えているだろうから、わかるはず、というのはうそだと思う。 もっと、「処理してほしい内容」を、「言葉」で表現できる訓練をしてほしい。 人間が紙と鉛筆でやる場合のことを念頭に作業を、1歩1歩文章化してみたらうまく説明できると思う。 例 ・「りんご」に当たるものをたとえばB1セルに入力。 ・「りんご」をどのシートの(多分どの行?列を対象か)のどの範囲を検索し、 見つかった場合、どの範囲のデータを、どのシートのセル範囲にもってくるのか コピー貼り付け(値のみ)でよいのか。 (それは「別シート」のどの行、列やセル範囲に持ってくるのか。) ・「りんご」は探索範囲に、複数出現しないのか。 ーーー VBAコードを載せたから、聞きたいことが判るというのも嘘。初心者が自分流に書いている場合が多いのと、回答者が読み解くには時間がかかる。 自分のVBAコードは、ないもの(参考までに添付はしても)として質問したほうがよい。 ーー どの点がうまく行かないのか、エラーになるのか、を詳説するのも必要。 この質問全体が丸投げ的で、小生の経験から、問題点をよく考え抜いたら、壁(行き詰まった点)は「1センテンスに」表現できる場合が多い。

oba7030
質問者

補足

大変失礼をいたしました。始めてでしたので、とても参考になりましたありがとうございます。 補足説明させて頂きます。 sheet1 の、エクセルシート上にランダムに”りんご”や”いちご”などの品名が記載されております。仮にりんごが横 ”k” 縦”5”の所に記載されており、その下に縦+1~+13段 横-15~+3 のセルに”1”と数値が記入されております。その”1”の文字も色分けがされております。 そのシート全体が元となり、sheet2 の 横 ”B” 縦”23”のセルに”りんご”と記入したら その下の”1”と色がそのまま反映されるようなマクロを組みたいのですが、どのようにすればよろしいのでしょうか。よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELでSheetにデータを蓄積したい

    Sheet1に入力シートを作成し、Sheet2に蓄積シートを作成しました。 Sheet1で作成されたデータをSheet2に蓄積させておきたい。 Sheet1のA2の値が入力された場合に実行するとすると Sheet1のデータ数は、毎回異なります。 他を参考に以下のように作ってみたのですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim lastA As Long, lastB As Long, ws1 As Worksheet, ws2 As Worksheet Set ws1 = Sheets("入力シート") Set ws2 = Sheets("蓄積シート") With Target If .Address <> "$A$2" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub If WorksheetFunction.Count(ws1.Range("a1:s1")) <> 19 Then Exit Sub lastA = ws2.Range("a65536").End(xlUp).Row lastB = ws1.Range(("a2:s2"), Selection.End(xlDown)).Select ws2.Range("a" & lastA + 1).Resize(1, 19).Value = _ ws1.Range("a2:S2").Resize(1, 19).Value End With End Sub 'ws1.Range("a2:S2").Resize(1, 19).Value の部分で '上記ws1の範囲の内、Row2の値しかws2へ反映されません どなたか教えて頂けないでしょうか。

  • エクセル VBA セルの色をSheet1とSheet2の両方を変えたいのですが・・・

    最近困っているところが表題の通りなのですが Sheet1のB2を右クリックするとB2のセルの色を変えて Sheet2のB2のセルも色を変えたいというものです。 現状で Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Dim RngA As Range, myRngA As Range Set Rng = Range("B3:W3,b7:w8,b12:w12,d13:w13,d17:w18,d22:w23") Set myRng = Intersect(Target, Rng) If myRng.Interior.ColorIndex = xlColorIndexNone Then myRng.Interior.ColorIndex = 37 Else If myRng.Interior.ColorIndex = 37 Then myRng.Interior.ColorIndex = 45 Else myRng.Interior.ColorIndex = xlColorIndexNone End If End If Cancel = True End Sub とここまではあるのですが、これをどう改造すればSheet2の同じセルの色もかわるのでしょうか? 宜しくお願いいたします

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • VBA Intersectで範囲の記述

    エクセル2000です。 Intersectで範囲の記述で、名前が定義された範囲、myRng と その2列右どなりを指定したいのですが、 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Union(Range("myRng"), Range("myRng").Offset(, 2))) Is Nothing Then Exit Sub MsgBox Target.Address End Sub のようにUnionを使わなければできないでしょうか? myRngがA1:A10であれば、 If Intersect(Target, Range("A1:A10,C1:C10")) Is Nothing Then Exit Sub と簡単に記述できるのですが。

  • エクセルのマクロについて教えていただきたいのですが・・・

    見積書を作成しているんですが、1枚目のシート(見積書)に明細が書ききれなかった時に、マクロを実行すると、『明細書』と言う名前のシートが(1)~(5)枚目まで追加され、各シートの小計を1枚目のシートに書き出す・・・と言うマクロを作りたいのですが、うまくいかずに困っています>< 追加されるシートの元となる『見積もりマスター』と言うシートがあって、そのシート内でそれぞれのシートの小計は取れるのですが・・・ 下記のマクロの中に何か追加すればうまくいく方法はありますか?? (明細書は追加する時もあれば追加しない時もあってその都度、使う人が、最大5枚まで何枚追加するかを決めるそうです。) Sub Macro1() Dim cnt As Integer Dim wkNum As Double Dim ws As Worksheet  For Each ws In Worksheets   If Left(ws.Name, 4) = "明細書(" Then    If IsNumeric(Mid(ws.Name, 5, 1)) Then     wkNum = Val(Mid(ws.Name, 5, 1))     If cnt < wkNum Then      cnt = wkNum     End If    End If   End If  Next ws  If cnt >= 5 Then   MsgBox ("明細書シートが既に5枚以上あるため追加できません")   Exit Sub  Else   Sheets("明細マスター").Copy after:=Sheets(Worksheets.Count)   ActiveSheet.Name = "明細書(" & cnt + 1 & ")"  End If End Sub マクロ自体をあまり理解できてなくて、会社の人や、ここで教えていただいて進めているので、出来ればそのままコピーして使用できるようにしていただけるとありがたいです。 よろしくお願いします。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • VBAでChangeイベントを使いたい

    今エクセルで出納を作ってます。 シート1には A日付 Bコード C金額 D 消費税区分 E 金額 F,G,H,Iにも同様に貸方科目を入れてます。 シート2にはAコードB科目を上から下にずっといれてます。 それで借方金額Cの金額をEに飛ばすこと VLOOKUPでBのコードに対応する科目を表示すること 上記をChangeイベントでやりたいのですが、金額転記はうまくいったのですが、 VLOOKUPの方が標準モジュールではうまくいくものの、シートモジュールに移すとうまく 行きません。おそらく根本的な理解がかけてるからだと思います。 今の記述は下記 シート1に Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 Or Target.Row > 100 Then Exit Sub If Target.Column <> 5 Then Exit Sub Dim Cnt As Long For Cnt = 2 To 100 Range("I" & Cnt).Value = Range("E" & Cnt).Value Next Cnt If Target.Row = 1 Or Target.Row > 100 Then Exit Sub If Target.Column <> 3 Then Exit Sub End Sub 標準モジュールに Option Explicit Sub 科目() Dim シート1 As Worksheet Dim シート2 As Worksheet Set シート1 = Worksheets("出納") Set シート2 = Worksheets("科目") Dim myR On Error GoTo ErrorHandler myR = Application.WorksheetFunction.VLookup(シート1.Range("B2"), シート         2.Range("A2:B87"), 2, False) シート1.Range("C2").Value = myR Exit Sub ErrorHandler: シート1.Range("C2").Value = "該当無し" End Sub  大変素人な質問ですみませんが、ご回答いただけると嬉しいです。  基礎の本やレファレンス本は見たのですが、標準モジュールでできること  がなぜシートモジュールでできないかが全く分かりません。  よかったらお教えください。

  • VBAでオートフィルを使って指定する文字列を含むものを表示させたい

    VBAを使って、セルD1に入力した文字列を検索するマクロを作りたいと思っています。 私は初心者で前に似たようなものを作ってもらって それを加工しようとしたのですが、うまくいきませんでした。 以前は完全に一致するもので表示でしたが、 今回は含むものを表示させたいです。 ワイルドカードは*をつけるのはわかるのですが、 いろいろやってみましたがダメでした。(単純なことかもしれないですけど) Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng1 As Range Dim myRng2 As Range Set myRng1 = Target.Cells(1) If Application.Intersect(myRng1, Range("D1")) Is Nothing Then Exit Sub Set myRng2 = Range("D1").CurrentRegion With myRng2 If myRng1 = "" Then ActiveSheet.ShowAllData Else .AutoFilter Field:=4, Criteria1:=myRng1.Value End If End With End Sub

  • マクロが動きません

    以下のようなプログラムでC3の値が変わるたびにA10の値に1を加えていきG3,H3が両方0になったらA10の値も0にする。C5の値が変わるたびにA15の値に1を加えJ3,K3が共に0になったらC5も0にするようにしました。 しかし、動作しません。 このシートの3行目は=シート名!セル番号 という形でほかのシートのセルの値が表示されるようになっています。G3、H3、J3、K3に手動で数値を入力した場合 は動作します。 ほかのシートのセルの値を表示させたセルの値が変化しても動作させる方法はないでしょうか> Private Sub worksheet_change(ByVal target As Range) With target If .Count > 1 Then Exit Sub If IsNumeric(.Value) = False Then Exit Sub If IsEmpty(.Value) = True Then Exit Sub If Not .Row = 3 Then Exit Sub Select Case .Column Case 3 Range("A10").Value = Range("A10").Value + 1 Case 5 Range("A15").Value = Range("A15").Value + 1 End Select End With If Range("g3").Value = 0 And Rang("h3").Value = 0 Then Range("A10").Value = 0 If Range("j3").Value = 0 And Rang("k3").Value = 0 Then Range("A15").Value = 0 End Sub

  • エクセル マクロ 追加

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub End If If Not Intersect(Target, Range("B1:C15")) Is Nothing And Target.Value = "" Then Exit Sub End If Dim c As Worksheet Dim flag As Boolean flag = False For Each c In Worksheets If c.Name = Target.Value Then flag = True Next If flag = False Then Exit Sub If Target.Address = "$C$2" Or Target.Address = "$C$3" Or Target.Address = "$C$4" _ Or Target.Address = "$C$5" Or Target.Address = "$C$6" Or Target.Address = "$C$7" _ Or Target.Address = "$C$8" Or Target.Address = "$C$9" Or Target.Address = "$C$10" _ Or Target.Address = "$C$11" Or Target.Address = "$C$12" Or Target.Address = "$C$13" _ Or Target.Address = "$C$14" Or Target.Address = "$C$15" Then Worksheets(Target.Value).Visible = True Worksheets(Target.Value).Select Else End If End Sub セルに文字が打っています シート名とセルが一緒の文字のとき移動するマクロです データがあるセルをクリックするとそのデータ先に飛ぶように 設定したマクロなのですが、 選択するページの文字は全部最初から設定されている黒文字がつかわれているのですが データがあるときは文字の色を変化させたいのですが どうすればいいでしょうか?