advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 48864 for A�����������������������... (0.009 sec.)
[[20230810183550]]
#score: 1420
@digest: b5e1276e1f9b3cad3eb15a0a2e51cc5b
@id: 94874
@mdate: 2023-08-14T02:15:31Z
@size: 8431
@type: text/plain
#keywords: exch (54242), 麦茶 (37513), 昼昼 (29447), 休a (25516), fnd1 (25238), 終st (23246), 了入 (20163), え件 (19899), (麦 (19180), 出a (14706), rng1 (14379), 終", (13533), 数=" (12679), stop (10841), 数ex (10097), 「st (7564), rng2 (6931), xlwhole (5885), ーキ (4237), lookat (4158), 日分 (4144), れ替 (2808), cells (2476), column (2266), 茶) (2241), 最終 (2140), 2023 (2108), 件数 (1927), what (1848), ル「 (1681), rng (1606), count (1539)
『セル「最終」の下のセル「a」とセル「STOP」を入れ替えたい』(麦茶)
検索したセルの入れ替えをしたいのですができません。 18の行にある「最終」を検索し、あればその下のセル「a」と 検索したセル「STOP」を入れ替えるため、下記コードのどこを変更すればよいか教えてください。 A B C D E F G 9 a a a a a a a 10 a a a a a a a 11 休 a a STOP a a a 12 aa a a a a 13 昼 昼 昼 昼 昼 昼 昼 14 a a a aa a 15 a a a a a a a 16 出 a a a a a a 17 a a a a a a a 18 a 最終 a aa a 19 a a a a a a a Sub 最終STOPセット() Dim ws As Worksheet '対象シート(アクティブシート) Dim fnd1 As Range, fnd2 As Range Dim key1 As String, key2 As String Dim v As String Dim i As Long Dim exch_count As Long '入れ替え件数 exch_count = 0 key1 = "最終" key2 = "STOP" For i = 2 To 8 Set fnd1 = Range(Cells(10, i), Cells(10, i)).Find(key1, LookAt:=xlWhole) If Not fnd1 Is Nothing Then If fnd1.Offset(1) = "C" Then Set fnd2 = Range(Cells(2, i), Cells(11, i)).Find(key2, LookAt:=xlWhole) If Not fnd2 Is Nothing Then v = fnd1.Offset(1).Value fnd1.Offset(1).Value = fnd2 fnd2.Value = v exch_count = exch_count + 1 End If End If End If Next Next MsgBox ("完了 入れ替え件数=" & exch_count) End Sub < 使用 Excel:Microsoft365、使用 OS:Windows11 > ---- すいません ×If fnd1.Offset(1) = "C" Then 〇If fnd1.Offset(1) = "a" Then でした。でもできません (麦茶) 2023/08/10(木) 19:20:33 ---- すみません、元コード見てませんがこういうことですか? Sub test() Dim rng1 As Range, rng2 As Range With Range("A9").CurrentRegion Set rng1 = .Find(what:="最終", lookat:=xlWhole) Set rng2 = .Find(what:="STOP", lookat:=xlWhole) If rng1 Is Nothing Or rng2 Is Nothing Then Exit Sub rng2.Value = rng1.Offset(1, 0).Value rng1.Value = "STOP" End With End Sub (フォーキー) 2023/08/10(木) 19:32:28 ---- これは↓の続きですよね。 [[20230801185706]] 『キーを検索し上にあるセルをキーの下と入れ替えたい』(麦茶) 前提があるなら提示しておいたほうがいいのでは? (もこな2) 2023/08/10(木) 19:44:25 ---- フォーキーさん もこな2さん ありがとうございます。 Sub 最終STOPセット() Dim rng1 As Range, rng2 As Range Dim v As String Dim exch_count As Long '入れ替え件数 exch_count = 0 Set rng1 = Range(Cells(11, 2), Cells(11, 8)).Find(what:="最終", LookAt:=xlWhole) Set rng2 = Range(Cells(2, 2), Cells(11, 8)).Find(what:="STOP", LookAt:=xlWhole) If rng1 Is Nothing Or rng2 Is Nothing Then Exit Sub v = rng1.Offset(1, 0).Value rng1.Offset(1, 0).Value = rng2 rng2.Value = v exch_count = exch_count + 1 MsgBox ("完了 入れ替え件数=" & exch_count) End Sub これでで入替えがきるようになりました。 (麦茶) 2023/08/11(金) 15:29:47 ---- 別の入れ替えになりますが、検索で「STOP」が見つかったら、同じ列の一番下19行目のセルと入れ替えるにはどのようにしたら良いか教えてください。 Sub STOP最終行へ() Dim rng1 As Range, rng2 As Range Dim v As String Dim exch_count As Long '入れ替え件数 exch_count = 0 Set rng1 = Range(Cells(2, 2), Cells(11, 8)).Find(what:="STOP", LookAt:=xlWhole) If rng1 Is Nothing Then Exit Sub exch_count = exch_count + 1 MsgBox ("完了 入れ替え件数=" & exch_count) End Sub (麦茶) 2023/08/11(金) 15:36:55 ---- こうとか >rng1.Value = Cells(Cells(Rows.Count, rng1.Column).End(xlUp).Row, rng1.Column) >Cells(Cells(Rows.Count, rng1.Column).End(xlUp).Row, rng1.Column) = "STOP" 以下気になる点 >Cells(2, 2) 最終STOPセットのコードにもありましたが、表は11行目からなのにB2セルはどこから出てきたんですか? >Range(Cells(11, 2), Cells(11, 8)) >Range(Cells(2, 2), Cells(11, 8)) 個人的に、Cellsプロパティは行列を変数にして範囲を可変にするときに使用しています。 上記のように範囲が固定されているのであれば、 Range("B11:H11") Range("B2:H11) のほうがいいんじゃないでしょうか。 コードについてはノーコメントで。 一つ言えるのは、質問の際は実際に使用するレイアウトを使用したほうがいいです。 (フォーキー) 2023/08/11(金) 15:53:58 ---- フォーキーさん 解りづらい説明ですいません。レイアウトは下記になります。 「STOP」を検索し、セルD8の「STOP」を見つけたら、同じD列の最終行のセルD12の「a」と 入れ替える。これがやりたいことになります。 A_ B_ C_ D_ E_ F_ G_ H_ 1_ あ い う え お か き 2_ 9:00 a a a a a a a 3_ 10:00 a a a a a a a 4_ 11:00 休 休 a a a a a 5_ 12:00 ブロック 休 a a a a a 6_ 13:00 昼 a a aa a 7_ 14:00 a a a aa a 8_ 15:00 a a STOP a ブロック a a 9_ 16:00 出 a a a a a a 10_ 17:00 a a a a a a a 11_ 18:00 a a a aa a 12_ 19:00 a a a a a a a (麦茶) 2023/08/11(金) 16:51:16 ---- わたしはこれまでとします。 Sub test2() Dim rng As Range Set rng = Range("A1").CurrentRegion.Find(what:="STOP", lookat:=xlWhole) If rng Is Nothing Then Exit Sub rng.Value = Cells(.Row, rng.Column) Cells(Cells(Rows.Count, rng.Column).End(xlUp).Row, rng.Column) = "STOP" End Sub 一部修正 (フォーキー) 2023/08/11(金) 17:17:00 ---- フォーキーさん ありがとうございます。 なんだか文字化けしてしまいましたが、やりたいことを少し整理すると、 12行目で「STOP」を Set rng1 = Range(Cells(12, 2), Cells(12, 8)).Find(what:="STOP", LookAt:=xlWhole) で検索しなければ検索範囲を広げて Set rng1 = Range(Cells(2, 2), Cells(11, 8)).Find(what:="STOP", LookAt:=xlWhole) で「STOP」を検索し、見つけたら同じ列の12行目のセルと入れ替える。 目的は12行目に「STOP」が1個ある状態にする方法を教えてください。 (麦茶) 2023/08/12(土) 13:13:59 ---- ちょっと手が滑ったみたいですが、 Cells(Cells(Rows.Count, rng.Column).End(xlUp).Row, rng.Column) = "STOP" の意味は理解されていますか。 要するに、(STOPが)見つかった列のなかの、最終行を調べているのでしょう? それが分かりさえすれば、あとは自力でできるでしょう? もう何度もやっているじゃないですか。できないはずがないですよ。 (xyz) 2023/08/12(土) 14:10:10 ---- xyzさん ありがとうございます。はい一旦は、下記でできたのですが Sub STOP() Dim rng As Range With Range("A1").CurrentRegion Set rng = .Find(what:="STOP", lookat:=xlWhole) If rng Is Nothing Then Exit Sub rng.Value = Cells(Cells(Rows.Count, rng.Column).End(xlUp).Row, rng.Column) Cells(Cells(Rows.Count, rng.Column).End(xlUp).Row, rng.Column) = "STOP" End With End Sub 私の説明が足らず実際のシートは、1シートが週間になっています。図で示した表は1日分で、実際には図と同じレイアウトの表が月〜土まで5日分縦に並んでいます。最終行へもっていくと月曜日にあるSTOPが土曜日の最終行へ移動してしまいます。これを回避するためにはどのような修正すればよいか教えてください。 (麦茶) 2023/08/12(土) 17:14:40 ---- stopから下にジャンプすれば? (xyz) 2023/08/12(土) 17:41:02 ---- これ、ちょっとおかしくないですか? ↓ > Cells(Cells(Rows.Count, rng.Column).End(xlUp).Row, rng.Column) = "STOP" Cells(Rows.Count, rng.Column).End(xlUp) = "STOP" と同じですよね? >図で示した表は1日分で、実際には図と同じレイアウトの表が月〜土まで5日分縦に並んでいます。 縦に5日分? そうなると、1日分が何行目から何行目が分かる必要があります。 A列の時間データが大小逆転した行が境目と判断するのですか? いつも「11行で1日分」と決まっているんですか? (2-12、13-23、・・) (半平太) 2023/08/13(日) 09:48:53 ---- あっ、本当ですね。 半平太さんありがとうございます。 (フォーキー) 2023/08/13(日) 09:54:36 ---- Sub main() Dim dic As Object, k As Variant, r As Range, c As Range, row As Long Set dic = CreateObject("scripting.dictionary") For Each c In Cells.SpecialCells(2) If c.Value = "STOP" Then dic(c.row & Chr(2) & c.Column) = True Next c For Each k In dic For Each d In Range("A" & Split(k, Chr(2))(0) & ":A" & Rows.Count).SpecialCells(2) If d.Offset(1).Value < d.Value Then row = d.row: Exit For Next d Cells(Split(k, Chr(2))(0) * 1, Split(k, Chr(2))(1) * 1).Value = Cells(row, Split(k, Chr(2))(1) * 1).Value Cells(row, Split(k, Chr(2))(1) * 1).Value = "STOP" Next k End Sub (mm) 2023/08/14(月) 11:15:31 ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/202308/20230810183550.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97068 documents and 608366 words.

訪問者:カウンタValid HTML 4.01 Transitional