[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件文がいまいち不案内』(snb1001)
いつもお世話になっております。
またわからないことが出てきましたので
教えを乞いたく存じます。
M列 N列 O列 9 16-11P/売 #N/A 10 16000 95 11 16-11P/買 370 12 17000 #N/A 13 16-11P/売 #N/A 14 16625 230 15 16-11C/買 115 16 17375 #N/A
こんな感じの表があります。
#N/Aには数字が入っています。
やりたいことは「M9」のセル内に「売」という文字が
入っているので「O9」のセルの値を下の「O10」
にコピーして「O9」の数値を消します。
また、「M11」のセル内には、「買」という文字が
入っているので「O12」のセルの値を一つ上の「O11」
にコピーして「O12」の数値を消します。
以下順番にM13、M15、・・・と見ていきます。
時にO列が空欄のところもあるかもしれませんが
その時もスルーで空欄をコピー。
そこで、こんなマクロを組んでみましたが
条件文がいまいち不案内のままです。
Sub 反転に()
Dim r As Range
Dim adr1 As String, adr2 As String, adr3 As String
Dim col As Range Dim col2 As Range Set r = Range("M9:O26") '★対象となる範囲 adr1 = r.Cells(1).Address(False, False)
IF adr1=*買* THEN
adr1.Cells(3).Select Selection.Copy adr1.Cells(3,1).Select ActiveSheet.Paste
adr1.Cells(3).Select Application.CutCopyMode = False Selection.ClearContents END IF
IF adr1=*売* THEN
adr1.Cells(3).Select Selection.Copy adr1.Cells(3, 1).Select ActiveSheet.Paste
adr1.Offset(3, 1).Select Application.CutCopyMode = False Selection.ClearContents
END IF
End Sub
なお、例の表にあるようにいつも2行ずつ
一まとまりになっており上のセルはM列に「買」
という文字を見つけると上のセルに、「売」と
いう文字を見つけると下のセルに自動的に入ります。
ただ、売り・買いの反転作業を経ると
O列はそのまま残ってしまいその場合の
後処理を手作業で行っていますが
ちょっと危ういのです。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Like演算子 を使って比較してください。
参考URL>>
http://www.239-programing.com/excel-vba/basic/basic044.html
http://span.jp/office2010_manual/excel_vba/practical/like-operator.html
https://www.moug.net/tech/exvba/0140043.html
(まっつわん) 2016/10/15(土) 15:27
>>#N/Aには数字が入っています。
この意味がわかりません。数字が入っているのに、なぜ #N/A と表示されているのですか?
>>ただ、売り・買いの反転作業を経ると >>O列はそのまま残ってしまい
アップされたコード、未実行ですけど、実行するとそうなるのですか?
>>にあるようにいつも2行ずつ一まとまりになっており
2行1かたまりの上の行のA列セルの文字列の最後が 売 または 買 ということですね?
(β) 2016/10/15(土) 15:29
もう何点か。
>>条件文がいまいち不案内のままです
条件文のみならず、領域の記述ルールも、参考書ないしはネットの解説ページで勉強をされたほうがよろしいかと。
なにか.Cells(1) といった記述を行う場合、「なにか」は Rangeオブジェクトでなければいけません。
Adr1.Cells(1) という記述だと、Adr1 がRangeオブジェクトではなく、単なる文字列なのでエラーになります。
また、adr1.Offset(3, 1).Select adr1. はだめですけど、それ以外に、Offset(3,1) は、基準セルの 3行下、1列右 をさします。 なんかおかしいですね。 また、この Select したセルを、どこでも利用してませんね。
(β) 2016/10/15(土) 15:39
説明文通りに処理をするとアップされた例では、O列がすべて空白になりますが、それでいいのですか?
(β) 2016/10/15(土) 15:53
Sub test2()
Dim Rng As Range Dim ixRow As Long
Set Rng = Range(Range("M9"), Cells(Rows.Count, "M").End(xlUp))
For ixRow = 1 To Rng.Count Step 2 Rng(ixRow, 3).Cut Rng(ixRow + 2, 3).Insert xlShiftDown Next End Sub (まっつわん) 2016/10/15(土) 16:44
コメントした通り、説明文の通りに処理すると、例示のケースでは ??? になりますが、 とりあえず。
Sub Sample() Dim i As Long
For i = 9 To Range("N" & Rows.Count).End(xlUp).Row Step 2 Select Case Right(Range("N" & i).Value, 1) Case "売" Range("O" & i + 1).Value = Range("O" & i).Value Range("O" & i).ClearContents Case "買" Range("O" & i).Value = Range("O" & i + 1).Value Range("O" & i + 1).ClearContents End Select Next
End Sub
(β) 2016/10/15(土) 17:30
だいぶ時間がたってしまっている間に
マクロまで作っていただいていて
大変、恐縮しております。
まっつわんさま、βさま
ありがとうございます。
さて、当初の私の説明があまりにマズく
みなさまに多くの混乱をおこさせてしまいました。
失礼しました。
さて、結論ですが、まっつわんさまの
ご指摘通りでした。
条件の「売」「買」は関係なくただ
上下の入れ替えで済む話でした。
これも、言われてみて初めて
気が付いたことでした。
この間、
最初の表で#N/Aをそのままにして、コピーペイストしてしまったことで
(このエラー表示の意味がよくわかっていませんでした。)βさまに
失礼してしまいました。
また、アップしたマクロはコンパイルすらできないまま
「こんな雰囲気」みたいな感じの手抜きのマクロとも呼べない
しろものでした。
にもかかわらず、βさまには「説明文通りに」処理したマクロを
書いてくださりほんとうにありがとうございます。頭が下がる思いです。
このマクロ、わたしの今の知識では
まったく歯が立ちませんので、
私の勉強用に表を書き換えながら
研究させていただきます。
改めて、ありがとうございました。
(snb1001) 2016/10/15(土) 23:03
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.