• 締切済み

エクセルで別シートへ転写するには

すみませんVB初心者で教えてください。 現在 sheet1にAからF列まで4行目から27行目まで、各データがあるのですが、sheet1にコマンドボタンをつけて、クリックしたら、sheet2へ転記するようにしたいのですが、sheet2もAからFまであり4行目からデータがはじまります。問題なのがsheet1でコマンドボタンを押したら、常にデータを付け足ししたいのです。 要はsheet2はデータ台帳にしたいのです。 そしてもう一点 sheet1でコマンドボタンをクリックしてsheet2へ転記がおわったら、sheet1のデータをクリアしたいのですが、すみませんがソースと解説のほうお願いします。大変困っています。

みんなの回答

  • myRange
  • ベストアンサー率71% (339/472)
回答No.7

  >sheet1のA列には色がついているのですが、クリアすると色が消えてしまいます Range("A4:A27").ClearContents ClearContentsメソッドで書式(色や罫線など)が消える? それちゃんと確認してから言ってるんでしょうねぇ。 ええかげんなことを言っては困りますよ。 再度試してみるべきです。 それでも消えると言い張るなら、コードをアップ願います。 それから、質問者お得意の「あともう一点」ですが、 最初の質問の内容と全然違いますから、こういった掲示板の性格上、別質問で投稿しなければいけません。   ●分からない点があれば上記のようなことを頭に入れた上で、どんどんどんどん質問しましょう。   VBA、初めのうちはちょと理解しずらいとこがあるでしょうが、途中で投げ出すに頑張ってほしいものです。  

ytsugie
質問者

お礼

数々の問題点への回答ありがとうございました。自分でもう少し勉強して また、質問させていただきます。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.6

  A列の色も、ですね? なら、次の1行を追加してください。 .Cells(LastRow + 1, "A").Interior.ColorIndex = _ Cells(R, "A").Interior.ColorIndex   以上ここまで。

ytsugie
質問者

お礼

すみません質問がわるかったみたいで。再度質問させてください。   sheet1からsheet2への転記のあと、クリア処理をします。そのとき、sheet1のA列には色がついているのですが、クリアすると色が消えてしまいます。ただ、色はsheet2へは転記したいのではなく、sheet1のA列の色がクリア処理で消えないようにしたいだけです。 それともう一点だけ、追加質問させてください。 sheet1のA列が行単位で何らか入力されている時は、G列の行の値は消さず、A列は空白した場合、G列も空白にするというソースを書いてみたのですが、作動しません。一度みてください。  自分のやった手順ですがsheet1でALT F11をおして sheet1で 左がgeneral 右がDeclarationsの状態で   For R = 4 To 27 If Cells(R, "A").Value ="" & Cells(R,"G").Value<>"" Then With Sheets("Sheet1") LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Cells(LastRow + 1, "G").Value = Cells(R, "H").Value Hのセルは常に絶対空白だから Gのセルが空白になると思ったのですが、ご指導お願いします。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

回答4、myrangeです。 >sheet1のセルBには関数がはいっており これからも質問することがあるかと思いますが、 上記のような大事なことは最初から提示するように心掛けましょう。 とは言っても、初めのうちはそこら辺りに気づくのはなかなかでしょうが。   で、続きの回答。 B4~27までは式が入っているので残したいということですね。 で、あれば次のようにしてください。   >Range("A4:F27").ClearContents を削除して、 Range("A4:A27").ClearContents Range("C4:F27").ClearContents とする。 以上ここまで。    

ytsugie
質問者

お礼

ありがとうございました。大変勉強になりました。 最後に一点だけ質問させてください Sheet1のA列のセルには色がついているのですが、Sheet2へ転記すると色も消えてしまいますが、色は保護することは可能でしょうか?

  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

おお、ちゃんと後始末したようですね。 なら、アドバイスしないわけにはいきませんねぇ。(^^;;; (処理内容) ボタンのあるシート(仮に、データシート、と呼ぶ)から ボタンをクリックして、"納入管理表"シートへデータ転記する 転記終了時に、データシートのデータは消去する データシートは、A4~F27までをデータに使用している 納入管理表シートには、4行目から転記する 以上のことを踏まえて、、、 '---------------------------------------------- Sub ボタン30_Click()  Dim R As Long  Dim LastRow As Long  For R = 4 To 27   If Cells(R, "A").Value <> "" Then    With Sheets("納入管理表")    LastRow = .Cells(Rows.Count, "A").End(xlUp).Row    .Cells(LastRow + 1, "A").Value = Cells(R, "A").Value    .Cells(LastRow + 1, "B").Value = Cells(R, "B").Value    .Cells(LastRow + 1, "C").Value = Cells(R, "C").Value    .Cells(LastRow + 1, "D").Value = Cells(R, "D").Value    .Cells(LastRow + 1, "E").Value = Cells(R, "E").Value    .Cells(LastRow + 1, "F").Value = Cells(R, "F").Value    End With   End If  Next R  Range("A4:F27").ClearContents End Sub '--------------------------------------------------- なお、転記部分の6行は .Cells(LastRow + 1, "A").Resize(1, 6).Value = Cells(R, "A").Resize(1, 6).Value この一行でもできますが、いままだ考えなくていいでしょう。 それから、不明の点はそれを明確に提示して再度質問のこと。 以上ここまで。  

ytsugie
質問者

お礼

ありがとうございます。やりたい事が全てやれました。  ただ、一点だけ問題が起こってしまったので再度教えていただきたいのですが、sheet1のセルBには関数がはいっており、関数まで消えてしまうのは大変困ってしまいます。 その関数は保護することはできるでしょうか? ちなみにその関数は以下のとおりです。 =IF(OR(A4="",ISERROR(VLOOKUP(A4,商品一覧!$A:$F,3,FALSE))),"",VLOOKUP(A4,商品一覧!$A:$F,3,FALSE)) 上記の関数で別シートからデータをひっぱてきています。数値だけクリアして関数は保護することは可能でしょうか? ご指導おねがいします。

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

(1)コマンドボタンのクリックのイベントがどうなるかわかるよね。コード例でわかっているようだ。 (2)コピー元のセル範囲の捉え方は、どう考えているの Sheet1のデータは A-F列(固定?)にあり(<=sheet2も、から)、 4行目から入力データが始まり、 最下行は場合場合で変動するのだろうね。 Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row Range("A4:F" & d).Select End Sub をテストでやって、望みのセル範囲を捉えていることを納得のこと。 確認のときシートタブSheet1をクリックしないと、セル範囲をクリックしてはダメ。またこの方法以外にCurrentRegionなど方法が数種ある。 ーー (3)この範囲をコピーする Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row Range("A4:F" & d).Copy End Sub で点線枠がブリンクするよね。 (4)これをシートSheet2に貼り付けるが、前回までの累積行の最後の次にやる点が注意で、この辺が質問者に判ら無かったのじゃないかな。 それはSheet1の最終行を捉えるときに使った Worksheets("Sheet1").Range("A65536").End(xlUp).Row が使える。Sheet2だから変えて、またシートを明示的に区別して表現して(この点も質問者には思いつきにくいだろう) Sub test01() Set sh1 = Worksheets("Sheet1") D1 = sh1.Range("A65536").End(xlUp).Row sh1.Range("A4:F" & D1).Copy Set sh2 = Worksheets("Sheet2") D2 = sh2.Range("A65536").End(xlUp).Row sh2.Range("A" & D2 + 1).Select End Sub (5)最後に貼り付けだが、Destinationを使うのが便利(左上隅 のセルを指定するだけでよいから) 前後関係を整えて Sub test02() Set sh1 = Worksheets("Sheet1") D1 = sh1.Range("A65536").End(xlUp).Row '-- Set sh2 = Worksheets("Sheet2") D2 = sh2.Range("A65536").End(xlUp).Row '-- sh1.Range("A4:F" & D1).Copy sh2.Range("A" & D2 + 1) End Sub (6)Sheet1を消すのは(2)で消す範囲が捉えられるから Sub test03() Set sh1 = Worksheets("Sheet1") D1 = sh1.Range("A65536").End(xlUp).Row sh1.Range("A3:F" & D1).Clear End Sub を納得し、終わりに付け加えればよい。 === 以上は、マクロの記録をとってみれば、この課題のコードの概略が判る。初心者と言いながら、マクロの記録をとって勉強もせずに、丸投げ質問してはいけない。マクロの記録で、上記でD1とD2の係わるコードの箇所だけが変えるべきとことで、そこをどう変えたらよいかぐらいの質問にまで絞れるはずだ。 質問者はこの課題をしようとするのが、無理な状態だと思う。皆、半年ぐらいは、本など読んで思考・試行しているとおもう。

ytsugie
質問者

お礼

細かいところまで親切に教えていただいてありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

こら、こら、 http://okwave.jp/qa4942780.html http://okwave.jp/qa4982122.html 先ず、この放ったらかしの質問をどうにかするべきでは? 見ず知らずの質問者のために時間を割いて回答してあげてる人に申し訳ないと思わないのだろうか。 ま、思わないから、放ったままにしてるのだろうが。 マナーが悪いなぁ。     スタッフ~~~    

ytsugie
質問者

お礼

すみませんでした。 お礼をするのを忘れていました。なんとか教えていただくことは可能でしょうか?

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

説明が回りくどい割に要領を得ず丸投げではソースと解説を受けても活用できるのか疑問です。 Sheet1のA~F列の4行目から最終行をSheet2のA~F列の最終行以降にコピー/転記し、Sheet1の該当行をクリアしたいのでしょうか。 まずはすべての操作をマクロ記録して、動作を再現し、希望の動作にならないところを確認してから自分で考えたのち解決しないのならその部分を具体的に質問するのがよいでしょう。 困った時に自力で可決できたことはいろいろ応用ができるようになるものです

ytsugie
質問者

お礼

すみません。 私は以下のようにつくりましたが、うまく動かず、更に処理がとても重い感じがします。クリアについては全くわからない状態です。アドバイスお願いします。 Sub ボタン30_Click() Dim LastRow As Long Dim R As Long Application.EnableEvents = False Application.ScreenUpdating = False For R = 4 To 26 Step 1 If Cells(R, "A").Value <> "" Then With Sheets("納入管理表") LastRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1 .Cells(LastRow, "C").Value = Cells(R + 1, "C").Value .Cells(LastRow, "B").Value = Cells(R + 1, "B").Value .Cells(LastRow, "A").Value = Cells(R + 1, "A").Value .Cells(LastRow, "D").Value = Cells(R + 1, "D").Value End With End If Next R End Sub

関連するQ&A

  • データが詰まったシートから、別のシートに空の行を入れて転記するには?

    シート1のA1に1,A2に2,A3に3,A4に4,A5に5と入力。 シート2にシート1のデータを次のような形で転記するにはどうしたらよいで しょうか? A1に1(=Sheet1!A1),3行空けてA5に2(=Sheet1!A2),3行空けてA9(=Sheet1! A3)に。 といったように3行空けて転記したいのですが。

  • エクセルVBA シート1からシート2へ転記したい

    シート1のデータはそのままで、 シート2に編集して転記したいです。 シート1にはA列からI列までデータが入っています。 行数は都度変わりますがデータは3行目から始まり 大体500行くらいです。 転記方法は シート1のD列→シート2のA列 シート1のE列→シート2のB列 シート1のF列→シート2のC列 シート1のC列→シート2のD列 でシート1のD列の値が同じ場合は 転記先のシート2の行数は増やさずにシート1のC列の値を 同じ値のF列内にカンマでつないで転記したいです。 でそのつないだ合計数をシート2のE列に表示したいです。 イメージ C  D    E     F ------------------------ A1 みかん 国内 Sサイズ A3 みかん 国内 Sサイズ D6 みかん 国内 Sサイズ D9 りんご 国内 Mサイズ G7 りんご 国内 Mサイズ F5 バナナ 海外 Lサイズ G1 バナナ 海外 Lサイズ A2 いちご 国内 Sサイズ D8 いちご 国内 Sサイズ F3 いちご 国内 Sサイズ H2 いちご 国内 Sサイズ   ↓ A    B    C      D     E ------------------------------------------- みかん 国内 Sサイズ A1,A3,D6   3←3個 りんご 国内 Mサイズ D9,G7     2←2個 バナナ 海外 Lサイズ F5,G1     2←2個 いちご 国内 Sサイズ A2,D8,F3,H2  4←4個 上記例の場合は元データは11行ですが編集後は4行です。 配列は自力で作成できないので考え方を教えていただきたいです。 構文をそのまま書いていただいても大変助かります。 Do~LoopかFor~Nextで上から順最終行まで処理で シート1からシート2へ転記する構文をかいて D列の値が直前に処理した値と同じ場合は 転記はしないでC列の値を変数1に代入し シート2の該当行のD列も変数2に代入し 変数1&","&変数2で対象行のD列に転記と考えましたが うまくできませんでした。 またシート2のE列の求め方ですが、上記変数1,2に代入した後に 変数3=変数3+1とかの文でカウントし、 その値を転記すればいいのでしょうか? すいません。今日1日頑張ってうまくできず 上手く説明できません。 よろしくお願いします。

  • VBA ボタンを押すと別シートの2行を抽出表示

    どなたかおしえてください。 業務の関係で エクセルで3つほどボタンを作成しました。 (1)のボタンを押すと Sheet1、Sheet2、Sheet3 のそれぞれの シートの「A行」「B行」セルをボタンがあるシートの A行セルから横に順番にはりつけていきます。 (2)のボタンを押すと、今埋まってる内容をクリアして、(例えば(1)のボタンを押した後など) Sheet1、Sheet2、Sheet3 のそれぞれの シートの「C行」「D行」セルをボタンがあるシートの A1セルから順番にはりつけていきます。 (3)のボタンを押すと、今埋まってる内容をクリアして、(例えば(1)や(2)のボタンを押した後など) Sheet1、Sheet2、Sheet3 のそれぞれの シートの「E行」「F行」セルをボタンがあるシートの A1セルから順番にはりつけていきます。 (1)ボタンも何かうまっていればクリアした後にこの操作ができるマクロをくみたいのですが、 どなたかプログラムをおしえてください。 業務上これができないと大変困る内容なので。 知っているかたがいましたら教示ねがいます。

  • 入力したデータをその都度別のシートに蓄積したい。

    お世話になります。 分不相応なのですが、教えてください。 売上や支払に関する明細を作るためにエクセルを使っています。 『シート1』 罫線を引いて実際の明細仕立てにして、  社名   品名1・数量1・金額1・・・   品名2・数量2・金額2・・・          合計金額 計算式も入れて、品番と数量が入ると 金額を算出するようにしています。 『シート2』 1行目には、社名・品名などの項目名を入れました。 1つの取引先に付き、1行分で シート1で入力したデータを転記したいと思います。 理想としては、シート1で1明細の入力が完了 →コマンドボタン(登録)を押す →シート2の2行目にデータが転記 これを繰り返してシート2の3行目、4行目と データを蓄積していく・・・感じです。 マクロの記録で、入力した内容を消去するボタンを作ったり 1行目だけ内容を転記させてみたり(そこで終了・・) 色々なキーワードで、それらしきサイトを検索してみたり、 初心者でも分かるマクロ&VBAみたいな本で調べてみたり・・ ちょっと行き詰ってきたので質問させて頂きました。 ユーザーフォームを作ってシートに転記する方法は見つけましたが シート1には計算式を結構盛り込んでしまったので、 フォームには手が届きそうにありません。 説明不足かもしれませんが、何か良いアイデアはないでしょうか。 マクロで解決できるのか、やっぱりVBAでやるしかないのか、 また何か良いサイトをご存知でしたらご紹介ください。 よろしくお願い致します。

  • 別シートに任意のセルを転記する方法について

    縦に6行ずつのデータがあり、これを横1行の別シートに転記する際に、 以前こちらで回答頂いた方法を応用したいと考えています。 =IF(INDEX(Sheet1!$Z:$Z,(ROW(A1)-1)*6+COLUMN(A1))=0,"",INDEX(Sheet1!$Z:$Z,(ROW(A1)-1)*6+COLUMN(A1))) アドバイスのとおり、上記の数式で見事に横にデータが転記できました。社員1人につき6行ずつのデータが縦にならんでおり、これを別の社員1人あたり1行で横に並んだデータにしたいというものでした。 1人目のデータは1行目を1列目に、2行目を2列目に・・・2人目のデータである7行目を1列目に、8行目を2列目に・・・3人目は13行目を1列目に・・・となります。 しかし、順次並べるのではなく、転記の必要にないデータを含むシートの任意のセルを選び、別シートの任意のセルへ転記する必要が生じたため、悩んで路頭に迷っております。。。 例えば、6行ずつのデータのうち、いつも3行目を別シートの5列目に。4行目は転記せずに、5行目を6列目に。また、6行目を7列目に転記せずに10列目に転記する。(8・9列目は、別データを入力するため空白にしたい) そして、社員2人目である7行目からは、上記と同じ規則で転記したい。 などというように、選んで転記する方法は何かありますでしょうか?? =INDEX(Sheet1!$Z:$Z,(ROW(B2)-ROW($B$2))*6+IF(COLUMN()=4,MOD(COLUMN(B2)-1,6)+1,MOD(COLUMN(B2)-1,7))) のようにしても上手くいきません。 何卒宜しく御願いいたします。

  • 入力シートから別シートに転記・蓄積について

    エクセルで入力シートのA1:D5(5行)の範囲を別シート(DBシート)の転記・蓄積させる方法を教えてください。また、入力データがA1:A5(1行)のときもあれば、A1:D5(5行)の場合もあるとします。宜しくお願いします。

  • 別シートの行を選択し対象列を転記するマクロ

    シート2のA~F列までデータがあります。 行数は10,000行です。(月ごとに100行くらい追加されます。) A列は項目がNO.で半角数字が連番で入力されてます。 セルA2→1 セルA3→2 セルA4→3 . . . セルA10000→9999 セルA10001→10000 という感じです。 シート1の セルI9に番号を入力すると シート2のその番号の行のB~F列の値を シート1のJ9~N9列に転記したいです。 例えば シート1のセルI9に100と入力したら、 シート2のA列が100と入力されているセルはA101ですから 101行目となります。101行目の各列の値を転記します。 ↓ シート1のセルJ9にシート2のセルB101の値を転記 シート1のセルK9にシート2のセルC101の値を転記 シート1のセルL9にシート2のセルD101の値を転記 シート1のセルM9にシート2のセルE101の値を転記 シート1のセルN9にシート2のセルF101の値を転記 シート1もシート2もセルの書式設定は標準。 B,E,F列は半角英数字の組み合わせで C,D列は半角数字のみです。 たまにF列に空白がある行があります。 B,F列は数字のみの場合もあります。 B,C,D,F列は数字のみの場合 「数値が文字列として入力されています」 となっています。 マクロで行いたいのですが記述そのものを教えてください。

  • Excel データの一部を別シートにコピー

    Excelで、データ行のどこかをクリックし、ボタンを押したとき、その行を別々のシートに分類してコピーさせるマクロを作りたいと思っています。 このとき、コピー先のシートをA列のデータで区別したいのです。 1.クリックした行のA列のセルを判定し、そのセルのデータを読み取る方法 2.読み取ったデータ(文字)を、コピー先シート名に指定する方法 このマクロの記述方法を教えてください。よろしくお願いします。 コピー範囲を指定し、貼り付け先のシートをアクティブにできれば、あとは記録マクロをつないで作るつもりです。

  • エクセル2013マクロで全て検索後、別シートに・・

    頑張ったのですが、残念な結果でした・・・ 分かる方教えて頂けますか? エクセルのシート1 A:Cにデータが入っています。 シート2のA4に検索したい文字を入れ、検索ボタンをクリック。 シート1のA:Cを全て検索し、見つかったらシート1のA:C1行をシート2のA6に書き出したいのです。 シート2のA5~C5には、タイトルが事前に入力されています。 どなたか、助けて頂けますか? 私が頑張った所、1行しか検索できず・・・ LOOPで回した所、同じ行が何行もLOOPされ・・・ マクロ初心者には難しい処理のようです。。。

  • excel 別シートへのデータの転記

    sheetが二枚あります。 sheet1 元データ sheet2 転出先(三種類あります) sheet1のA列に〇がついていたらsheet1Q列のシート名を見て、 転出先に同じデータがあるか?無ければ新規作成をするか? 新規作成をする場合には以下のように、 そのシート名の各セル番地にデータを転記。 sheet1のA列2行目移行同じ繰り返しで○があるか見に行く。 sheet1の1行目は項目名になります。 A2に○が付いていてQ列のシート名が100だった時 A2のデータを以下のように。 sheet1   sheet2(シート名は100) P列の値 → A7へ C列の値 → A8へ H列の値 → A9へ I列の値 → A10へ F列の値 → E5へ L列の値 → D6へ M列の値 → D7へ K列の値 → F9へ J列の値 → D8へ 続けてA4に○が付いていてQ列のシート名が100だった場合。 sheet1   sheet2(シート名は100) P列の値 → A12へ C列の値 → A13へ H列の値 → A14へ I列の値 → A15へ F列の値 → E10へ L列の値 → D11へ M列の値 → D12へ K列の値 → F14へ J列の値 → D13へ 以上のようなことがしたいのですが、 参考書でサンプルなどを見てやっているのですが、 なかなかうまくいきません。 コードのご教示をお願いたします。

専門家に質問してみよう