質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

2907閲覧

エクセル VBA シフト表作成中

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/05/26 12:49

VBA初心者です。
手詰まりなので、質問させてください!

画像のような工程表を作成しています。
現状は3行使用しています。
例:4を入力すると・・・時系列に沿って作業枠に反映される。

それを2行にまとめたいと考えています。
作業入力欄に関数を入れられないので、VBAで出来ないかと模索しています。
イメージ説明

私が考えたもの

Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range For Each r In Range("C15:J15") r.FormulaR1C1 = "=if(r[1]c="""","""",rc[-1])" Next End Sub

これだと、うまくいきません。
皆様の知恵をお借りしたいと考えています!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

tomo.inaさんが質問しているようにやりたいことがうまく伝わっていません。

また、jawaさんがアドバイスしているように

処理をするタイミングから、実際の動作をイメージしてみましょう。

ここで、マクロの記録を使います。
「マクロの記録」を開始してから、4を入力して、やりたいことを行います。
処理の最後の、行を2列にしたら、「マクロの記録を終了」します。
そうすると、VBAの部分に行った処理がコーディングして記録されています。
それを解析すると、エクセルではどのような処理をしているか
(セルの値の取得、入力とか、行の削除のしかた)とかが
参考になります。
初心者にはお勧めの機能です。

投稿2016/05/31 05:25

MasamiKobayashi

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず苦言になってしまいますが、うまくいかないとき、どううまくいっていないかを伝えていただかないと適切なアドバイスができません。
落ち着いて、うまくいっていない状況を説明したほうが解決も早いですよ


ここから本題です。

処理をするタイミングから、実際の動作をイメージしてみましょう。
もしクリック操作で処理が発生するのなら、対象範囲を左から順にチェックして空欄の場合はひとつ左からコピー、空欄でなければ何もせず隣へ移っていけばいいと思います。

しかし今回はWorksheet_Changeイベントに実装しているところから察するに、値を入力したときリアルタイムに変更したいのではないかと思います。
この場合、最初は全部空欄で、1つ値を入力するたびに入力内容が対象セル範囲に反映されていく、というような状況になるのではないでしょうか?

だとすると、まっさらな状態からの最初の入力では、入力位置より右側のすべてのセルに同じ値が入るような動きが想像されます。

そうなると、書き換える条件も少し変わってきます。
・入力位置の1つ右のセルが、入力した位置にもともと入力されていた値と同じか、もしくは空白なら今回入力値をセット。

コードにすると以下のような感じです。(机上コードですが。)

Application.EnableEvent=False 'イベント発生を停止する iLastCol = 10 '最終列はJ列 '変更後の値に退避 NewVal = target '変更前の値を調べるためにUnDo Application.UnDo OldVal = target '変更後の値に戻す target = NewVal For iCol = target.Column + 1 to LastCol If Cells(target.Row, iCol) = OldVal Or Cells(target.Row, iCol) = "" Then '変更前の値と同じか空欄の場合、 Cells(target.Row, iCol) = NewVal Else '条件を満たさない場合、ループ終了 Exit For End If Next Application.EnableEvent=True 'イベント発生を再開する

推測から暴走気味にアドバイスしてしまいました。見当違いでしたらすみません。

投稿2016/05/27 07:42

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

2行にまとめた場合、処理をする前は
B15に4
F15に2
H15に5
I15に3
上記以外の15行目には値無し
であると考えてよいのでしょうか?

処理した結果、C15~E15に4がセットされるというイメージですか?

投稿2016/05/27 00:26

tomo.ina

総合スコア357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問