- 締切済み
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を繋げたソースが私の力では無理でした。誰か教えてください。
- 961awaawa
- お礼率85% (391/460)
- Excel(エクセル)
- 回答数7
- ありがとう数5
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (454/690)
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
- chayamati
- ベストアンサー率41% (254/607)
>test1からtest4を繋げたそれぞれのマクロが単独で動作するなら それぞれを処理順に列記しまた、マクロを新規に作成します Sub 連結() Sub test1 Sub test2 Sub test3 Sub test4 end sub エディターはマクロツールに在り、編集から入ります。
- HohoPapa
- ベストアンサー率65% (454/690)
可能な限り応援したいところではあるんですが いかんせん、 掲示されたコード、文章から 具体的な(正確な)やりたいことを読み取れないのです。 以下私の理解できない点を列挙しますので、 (これに答えるのではなく) サンプル画像とやりたいことをまとめ直し、 再掲示したほうがいいと思います。 ■疑問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列が空欄になる前まで繰り返す。 ということでしょうか?
お礼
マクロボタンを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)
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 こちら放置が続くのなら、こちらへの訪問が遠のきますよ
補足
実行時エラー424 オブジェクトが必要です。となります。デバッグを押したら Worksheets("Sheet2").Cells(n, "O").Resize(, 336).Value = .Range("Y7:MV7").Value の所が黄色くなりました。
- okwavey2
- ベストアンサー率15% (251/1593)
質問を2つに分ける意味が感じられない。 見て欲しければリンクを張りましょう。
お礼
そのやり方もありましたね!!!補足ってやり方も勧めて頂きました。今から書いてくれたソースを試してみます。
- watabe007
- ベストアンサー率62% (476/760)
https://okwave.jp/qa/q9518962.html こちらは未解決?
お礼
こちらはこちらで解決してるんです。が今作ってる物を進めていく内に二つ以上のセルの選択の壁?にぶつかりヘコみはじめました。作って頂いたあのソースのマクロに足すんですが、違う簡単なマクロで同時進行を試みても結局下に向かえない形から抜け出せません。今回の質問は前編と後編を繋げて1つのマクロボタンを押す度にあの一連の動作を実現して頂ければ有り難いです。
補足
マクロボタンを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)
参考に 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
お礼
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 が、オーバーフローのエラーになります。 間違いの原因やお奨めなど頂けたらありがたいです。
- ベストアンサー
- Excel(エクセル)
- 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(エクセル)
- 【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 こんな感じで作っています。 作り方、もしくは参考になるサイトがありましたら、教えていただければありがたいです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- その他MS Office製品
- 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
- ベストアンサー
- Visual Basic
- 列を変更して転記したいのですが。
すみません、誰か教えていただけませんか。 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 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- リストボックスに複数シートのデーターを表示させる。
リストボックスに複数シートのデーターを表示させる。 下記の構文で複数表示はできたのですが、この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 よろしくお願いします
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- 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
- 締切済み
- Excel(エクセル)
お礼
サポートありがとうございますHohoPapaさん。("O3:O1011")の計算式の件を伝え忘れてました。それは("O3:O1011")をTRANSPOSEで横並びにかえてまして("O3:O1011")が下にずれてE3からの値が入って行くことで横並びにされた値にも 右に1つずつずれ、E3からの値がここにも入る形をとってます。 書いてくださったこのソースを1度試してみます(; ・`д・´)