• 締切済み

Excel2007で困ってます2

Sub test4() Worksheets("sheet2").Select Dim n As Byte, t As Byte n = Cells(Rows.Count, "O").End(xlup).Row + 1 t = Cells(Rows.Count, "ML").End(xlup).Row + 1 Range ("O" & n, "ML" & t).Select Selection = Worksheets("sheet1").Range("Y7:MV7").Value End Sub [test3でC3から始まる値をX5に入れる度に("Y:MV")に計算結果の値が出来上がります。その結果の値を、sheet2の("O3:ML3")には1から336の数字が振られていて、その下にその下にと次々と計算結果をコピーします。] test1からtest4を繋げたソースが私の力では無理でした。誰か教えてください。

みんなの回答

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.7

O列3行目以下、1011行目までに埋まっている計算式は 失っていいんですね? ならば、 あらかじめ計算結果に置き換えてある前提で話を進めます。 また、ボタンを押す都度、 対象の行番号がカウントアップするわけですが、 途中から再開したいときを考慮し この行番号はA1セルに埋まっている前提にしました。 つまり、A1に3が埋まっている前提のコードです。 むろんカウントアップはマクロが行っています。 A1を既に使っているようなら、適当なセルに変更してください。 また、動作確認は全く行っていません。 使うのであれば、しっかり検証してみてください。 Sub Macro1()  Dim JobNum As Long  Dim ColCnt As Long  Dim RowCnt As Long  Dim wsI As Worksheet  Dim wsO As Worksheet    Set wsI = ThisWorkbook.Sheets(1)  Set wsO = ThisWorkbook.Sheets(2)    JobNum = wsI.Cells(1, 1).Value '処理する番号格納セル!!     'O3を空ける  wsI.Cells(3, 15).Insert Shift:=xlDown, _   CopyOrigin:=xlFormatFromLeftOrAbove    'O3にEを  wsI.Cells(3, 15).Value = wsI.Cells(JobNum, 5).Value  'X5にCを  wsI.Cells(5, 24).Value = wsI.Cells(JobNum, 3).Value     '出力先行番号を求める  RowCnt = 3  Do   If wsO.Cells(RowCnt, 15).Value = "" Then Exit Do   RowCnt = RowCnt + 1  Loop  '("Y7:MV7")を出力先に追記  For ColCnt = 15 To 15 + 335   wsO.Cells(RowCnt, ColCnt).Value = _    wsI.Cells(7, ColCnt + 10).Value  Next ColCnt    '処理する番号格納セル!!をカウントアップ  wsI.Cells(1, 1).Value = wsI.Cells(1, 1).Value + 1 End Sub

961awaawa
質問者

お礼

サポートありがとうございますHohoPapaさん。("O3:O1011")の計算式の件を伝え忘れてました。それは("O3:O1011")をTRANSPOSEで横並びにかえてまして("O3:O1011")が下にずれてE3からの値が入って行くことで横並びにされた値にも 右に1つずつずれ、E3からの値がここにも入る形をとってます。 書いてくださったこのソースを1度試してみます(; ・`д・´)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.6

>test1からtest4を繋げたそれぞれのマクロが単独で動作するなら それぞれを処理順に列記しまた、マクロを新規に作成します Sub 連結() Sub test1 Sub test2 Sub test3 Sub test4 end sub エディターはマクロツールに在り、編集から入ります。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.5

可能な限り応援したいところではあるんですが いかんせん、 掲示されたコード、文章から 具体的な(正確な)やりたいことを読み取れないのです。 以下私の理解できない点を列挙しますので、 (これに答えるのではなく) サンプル画像とやりたいことをまとめ直し、 再掲示したほうがいいと思います。 ■疑問1 >[("O3:O1011")には関数も入ってるので >値だけを("O4:O1012")に入れて、1行ずらした形にします] O列3行目以下、1011行目までを O列4行目以下に、全数移動するように読み取れます。 しかし、 >関数も入ってるので値だけを との記述から 単に計算結果、つまり値だけを移動すると この計算式を失ってしまいます。 失ってしまっていいんですね? ■疑問2 >[test1で空いたセルO3に、 >選択されたE3の値を入れまして、 >E4、E5、E6、…と移動してはO3に入れていきます。] まず、E3の値をO3に複写するように読み取れます。 その後、E4の値をO3に、E5の値をO3に... との記述をそのまま読み取ると E列最終行の値がO3に埋まるだけのように思えます。 また、このE列最終行をどのように判断すればいいのか不明です。 ■疑問3 >[test2でE3から始まる値を1つずつO3に入れると、 >それに伴って、 >セルC3の値をX5に1つずつ入れては >C4、C5、C6、…と移動してX5に入れていきます。] これも、疑問2と同じ疑問が起きます。 ■疑問4 >[test3でC3から始まる値をX5に入れる度に >("Y:MV")に計算結果の値が出来上がります。 >その結果の値を、 >sheet2の("O3:ML3")には1から336の数字が振られていて、 >その下にその下にと次々と計算結果をコピーします。] ("Y:MV")が336列あり、 ("O3:ML3")は336セルあるのは理解できます。 が、 ("Y:MV")の何行目、あるいは、何行目と何行目、 あるいは、何行目から何行目まで使えばいいのかを読み取れません。 ■総じて test1により、O3を空ける。 E3の値をO3に埋めるとC3が書き換わる。 更に C3の値をX5に埋めると("Y:MV")の 何行目かのセルたち(336個)が書き換わる。 このセルたち(336個)を sheet2の("O4:ML4")以下に追記する。 続いて、 test1により、O3を空ける。 E4の値をO3に埋めるとC4が書き換わる。 更に C4の値をX5に埋めると("Y:MV")の 何行目かのセルたち(336個)が書き換わる。 このセルたち(336個)を sheet2の("O4:ML4")以下に追記する。 この繰り返しを E列が空欄になる前まで繰り返す。 ということでしょうか?

961awaawa
質問者

お礼

マクロボタンを1度押します。 test1により、O3を空けます。 E3の値をO3に埋めた次はC3に移りましてC3の値X5に埋めると("Y7:MV7")に値がでます。 このセルたち(336個)を sheet2の("O4:ML4")に追記する。 続いて、マクロボタンを押すこと2度目になります。 test1により、またO3を空ける。E4の値をO3に埋めるとC4に移る。 C4の値をX5に埋めると("Y7:MV7")に値ができ、 このセルたち(336個)を sheet2の("O5:ML5")に追記する。 この繰り返しをマクロボタンを押す度にしたいです。 (E列が空欄になる前まで繰り返す)←は今のところ要らないです。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

test1 ~ test4 を繋げると、こんな感じかな '最初はSheet1のE3セルを選択した状態で実行 Sub Test1()   Dim n As Long   With Worksheets("Sheet1")     .Activate     With Range("O3", Cells(Rows.Count, "O").End(xlUp))       .Value = .Value     End With     Range("O3").Insert Shift:=xlDown     Range("O3").Value = ActiveCell.Value     Range("X5").Value = ActiveCell.Offset(, -2).Value     n = Worksheets("Sheet2").Cells(Rows.Count, "O").End(xlUp).Row + 1     Worksheets("Sheet2").Cells(n, "O").Resize(, 336).Value = .Range("Y7:MV7").Value     ActiveCell.Offset(1).Activate   End With End Sub https://okwave.jp/qa/q9518962.html こちら放置が続くのなら、こちらへの訪問が遠のきますよ

961awaawa
質問者

補足

実行時エラー424 オブジェクトが必要です。となります。デバッグを押したら Worksheets("Sheet2").Cells(n, "O").Resize(, 336).Value = .Range("Y7:MV7").Value の所が黄色くなりました。

  • okwavey2
  • ベストアンサー率15% (251/1593)
回答No.3

質問を2つに分ける意味が感じられない。 見て欲しければリンクを張りましょう。

961awaawa
質問者

お礼

そのやり方もありましたね!!!補足ってやり方も勧めて頂きました。今から書いてくれたソースを試してみます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

https://okwave.jp/qa/q9518962.html こちらは未解決?

961awaawa
質問者

お礼

こちらはこちらで解決してるんです。が今作ってる物を進めていく内に二つ以上のセルの選択の壁?にぶつかりヘコみはじめました。作って頂いたあのソースのマクロに足すんですが、違う簡単なマクロで同時進行を試みても結局下に向かえない形から抜け出せません。今回の質問は前編と後編を繋げて1つのマクロボタンを押す度にあの一連の動作を実現して頂ければ有り難いです。

961awaawa
質問者

補足

マクロボタンを1度押します。 test1により、O3を空けます。 E3の値をO3に埋めた次はC3に移りましてC3の値をX5に埋めると("Y7:MV7")に値がでます。 このセルたち(336個)を sheet2の("O4:ML4")に追記する。 続いて、マクロボタンを押すこと2度目になります。 test1により、またO3を空ける。E4の値をO3に埋めるとC4に移る。 C4の値をX5に埋めると("Y7:MV7")に値ができ、 このセルたち(336個)を sheet2の("O5:ML5")に追記する。 この繰り返しをマクロボタンを1回ずつ押す度にしたいです。 (E列が空欄になる前まで繰り返す)←は今のところ要らないです。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に Sub test4()   With Worksheets("Sheet2")     .Cells(Rows.Count, "O").End(xlUp).Offset(1).Resize(, 336).Value = _       Worksheets("Sheet1").Range("Y7:MV7").Value   End With End Sub

961awaawa
質問者

お礼

Watabe007さんには、ぜひ[Excel2007で困ってます1]から見て頂きたいです。これは後編なんです。

関連するQ&A

  • Excel007大量データのコピーが

    (1)、Sheet1の("Y7:MV7")の各セルに値A、B、C、の何れかが配置形の中央揃えで入ってます。 (2)、Sheet2の("O3:ML3")の各セルには1~336の数字が順に振られています。 そして(1)の形でデータが入るたびに(2)の最下に(1)の値だけがコピーされるようにVBAで次の様に書いてみました。 Sub test() Worksheets("Sheet2").Select Dim n As Byte, t As Byte n = Cells(Rows.Count, "O").E nd(xlup).Row + 1 t = Cells(Rows.Count, "ML"). End(xlup).Row + 1 Range("O" & n:"ML" & t).Sele ct Selection = Worksheets("Shee t1").Range("Y7:MV7").Value End Sub が、オーバーフローのエラーになります。 間違いの原因やお奨めなど頂けたらありがたいです。

  • Excel2007で最下行のコピーについて

    Excel2007で最下行のコピーについてなんですが、上手くいきません。そこで質問させて頂きます。 sheet3のセルO6、セルP6、セルQ6から下に向かって5000行目までに格子と関数が既に入ってます。 が、しかしコピーをしたい数値は今のところはO、P、Qの6行目にとどまっています。なので最下行はセルOPQの6行目になります。 sheet3のセルOPQの最下行数値をsheet4のセルABCの2行目にコピぺしたいです。 そこで作ってみました。基軸と言いますかsheet1を選択してから標準モジュールに Sub test() Worksheets("sheet3").Select Dim n As Long,t As Long n = Cells(Rows.Count,"O").End(xlUp).Row + 1 t = Cells(Rows.Count,"Q").End(xlUp).Row + 1 Range("O" & n, "Q" & t).Value.Select Selection = Worksheets("sheet4").Range("A2:C2").Value End Sub と書きましたがエラーになります。どの様すればよろしいですか?お願い致します。

  • 【Excel VBA】データ貼り付けの開始位置について

    Excel2003を使用しています。 先日、こちらでアドバイスをいただきながら、下記のようなマクロを作りました。内容はあるセルの値と同じ名前のシートへデータをコピーするというものです。 Sheet1に貼り付け元のデータが表形式であり、必要なデータのみ該当のシートへコピーします。マクロ実行後は、別の新しいデータをSheet1へコピペして、またマクロを実行するのですが、その際、データの貼り付け開始位置を前回マクロを実行して貼り付けられたデータから2行空けたいのですが、可能でしょうか? ________________________________________________________________________________________________________________________________ Sub test3() Dim n As Long Dim i As Long Dim j As Long  Worksheets("Sheet1").Activate   For n = 4 To Cells(Rows.Count, 2).End(xlUp).Row    If Cells(n, 3).Value <> "" Then     With Worksheets(CStr(Cells(n, 3).Value))       i = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 2).Copy .Cells(i, 2)       Cells(n, 7).Resize(, 2).Copy .Cells(i, 4)       Cells(n, 11).Copy .Cells(i, 3)     End With    End If    If Cells(n, 13).Value <> "" Then     With Worksheets(CStr(Cells(n, 13).Value))       j = .Cells(Rows.Count, 3).End(xlUp).Row + 1       Cells(n, 12).Copy .Cells(j, 2)       Cells(n, 17).Copy .Cells(j, 4)       Cells(n, 18).Copy .Cells(j, 6)       Cells(n, 11).Copy .Cells(j, 3)     End With    End If   Next n End Sub

  • VBA 類似シート名 処理

    シート名が、「一覧 (2)」、「一覧 (3)」、・・・・・「一覧 (n)」、と連続する各シートの表データを「一覧」という名前のシートにまとめたいのですが、やり方が分かりません。 For Each を使えば出来るんじゃないかと調べましたが、見付けられませんでした。 シート処理以外は、   Dim CoR As Long, PaR As Long, PaR2 As Long CoR = Worksheets(???).Cells(Rows.Count, 1).End(xlUp).Row PaR = Worksheets("一覧").Range(Rows.Count, 1).End(xlUp).Row PaR2 = CoR + PaR + 1 Worksheets(???).Range(Cells(2, 1), Cells(CoR, 12)).Copy Worksheets("一覧").Range(Cells(PaR, 1), Cells(PaR2, 12)).PasteSpecial Paste:=xlPasteValues こんな感じで作っています。 作り方、もしくは参考になるサイトがありましたら、教えていただければありがたいです。 よろしくお願いします。

  • Excel 2007 マクロ 別シートの情報を反映する方法

    Excel 2007 マクロ 別シートの情報を反映する方法 Sheet1とSheet2があります。 Sheet1のD列とSheet2のM列で同じ値があれば、 Sheet1のE列の値をSheet2のN列に反映するマクロを 作成しました。 下記が正しいと思っていたのですが、エラーメッセージは出ずに 値が反映されません。 マクロに問題点があればご指摘ください。 よろしくお願いいたします。 Sub Rist() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") For i = 2 To ws1.Cells(Rows.Count, "D").End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, "M").End(xlUp).Row If ws2.Cells(j, "M") = ws1.Cells(i, "D") Then ws2.Cells(j, "N") = ws1.Cells(i, "E") End If Next j Next i End Sub

  • VBA 任意のシートからコピーを始める。

    教えてください。 全てのシートをコピーして一つのシートにまとめるプログラムシートを作成しました。 1番目のシートからコピーを始める場合は For i = 2 To Worksheets.Count 2番目のシートからコピーを始める場合は For i = 3 To Worksheets.Count とすればよいのですがこれだといちいちモジュールコードを出して数字を変更しなければならず面倒です。 そこでユーザーフォームのコンボボックスに任意の数字を入れてクリックを押せば希望するシートからコピーを始めるプログラムを作成してみましたがうまくいきません。どなたか教えてくださいませんか。 Sub matome() Dim i As Integer Dim lRow As Long, lCol As Long, lRow2 As Long, lRow3 As Long, SNo As Integer '----何番目からコピーを始めるかを決定します With UserForm2 SNo = .ComboBox1.value End With For i = 1 + SNo To Worksheets.Count With Worksheets(i) lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1 lCol = .Cells(1, Columns.Count).End(xlToLeft).Column '----シートのデータが2行以上の場合にコピーします If lRow >= 2 Then lRow2 = Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 If lRow2 < Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 Then lRow2 = Worksheets(1).Cells(Rows.Count, 5).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(lRow, lCol)).Copy Worksheets(1).Cells(lRow2, 1) End If End With Next i

  • 列を変更して転記したいのですが。

    すみません、誰か教えていただけませんか。 A列に値が入力がされていて、その値をF列に転記していき 15行までいけば2列横にズレて転記していき更に、15行で 2列横と続けたいのですがうまく出来ません。 下記のように記述してみたのですが、値が置き換わるだけで 転記出来ません。 誰か教えて頂けませんでしょうか。 Sub TEST() Dim i As Long, ii As Long Dim myR As Long myR = Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row ii = 5 For i = 1 To myR Cells(1, ii).End(xlUp).Offset(0, 1).Value = Cells(i, 1).Value If Cells(1, ii).End(xlUp).Row = 15 Then ii = ii + 2 End If Next i End Sub 宜しくお願いします。

  • リストボックスに複数シートのデーターを表示させる。

    リストボックスに複数シートのデーターを表示させる。 下記の構文で複数表示はできたのですが、このListBox1のColumnCount7つ目に シートBのC列のデーターを表示させる方法をお教えください。 With ListBox1 .ColumnCount = 7         ↓ .ColumnWidths = "0;100;120;0;0;0;120" .RowSource = "シートA!B5:G" & Worksheets("シートA").Cells(Rows.Count, 5).End(xlUp).Row        → .RowSource = "シートB!C5:C" & Worksheets("シートB").Cells(Rows.Count, 5).End(xlUp).Row .MultiSelect = fmMultiSelectMulti .ListStyle = fmListStyleOption End With よろしくお願いします

  • Excel VBA; 複数のループ処理

    ↓のようなコードがあります。 Dim i As Long, MaxRow1 As Long, MaxRow2 As Long MaxRow1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row MaxRow2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To MaxRow1 Worksheets("Sheet1").Cells(i, 1).Value = i . Next i For i = 1 To MaxRow2 Worksheets("Sheet2").Cells(i, 1).Value = i . Next i これらを最大行の多いシートに合わせて、パフォーマンスを良くしたいと思います。 同様の処理をシート1、シート2で実施しているので纏めて記述したいです。 シート1、シート2に対する処理をサブルーチンにする方法しかありませんか? どなたかお願いします。 If MaxRow1 >= MaxRow2 Then For i = 1 To MaxRow1 Else For i = 1 To MaxRow2 End If Worksheets("Sheet1").Cells(i, 1).Value = i Worksheets("Sheet2").Cells(i, 1).Value = i . Next i

  • ExcelのVBAでコピーのやり方

    シート1のAL列の3行目以降の中から0以外の 値が入っているAJ列~AN列の行を全てコピーして、 シート2のB列~F列に貼り付けたいです。 シート2のB列~F列の7行目から下にコピーした値を入れていきたく、 値が入っていたらその次の行に貼り付けたいです。 例えば、7行目~15行目まで値が入っていたら、16行目から貼り付けるようにしたいです。↓のように書いてみたのですが、 コピーしている状態になるだけで、シート2の方へ貼り付けができない状態です。 また、オブジェクトが必要ですと表示が出ます。 どこをどうなおしたらいいでしょうか。 文章がわかりにくく申し訳ありません。 回答よろしくお願いいたします。 sub 値をコピー() Dim rTargetRange As Range, ii As Long Set rTargetRange = Nothing For ii = 4 To Cells(Rows.CountLarge, "AL").End(xlUp).Row If (Cells(ii, "AL").Value <> 0) Then If (rTargetRange Is Nothing) Then Set rTargetRange = Cells(ii, "AJ").Resize(, 5) Else Set rTargetRange = Application.Union(rTargetRange, Cells(ii, "AJ").Resize(, 5)) End If End If Next With Worksheets("sheet2") With .Cells(.Rows.CountLarge, "B").End(xlUp) If (.Row = 1 And .Value = "") Then rTargetRange.Copy .Offset(0) Else rTargetRange.Copy .Offset(1) End If End With End With End Sub また、↓のような違ったコードも試しましたが、 うまくいきませんでした。 N=Sheet2.Cells(Rows.CountLarge, "AL").End(xlUp).Row+1 SHEET1.SELECT For ii = 4 To Cells(Rows.CountLarge, "AL").End(xlUp).Row If Cells(ii, "AL").Valu e <> 0 Then RANGE("AJ" & ii & ":AN" & ii).COPY SHEET2.RANGE("B" & N) N=N+1 END IF NEXT

専門家に質問してみよう