• ベストアンサー

VBA セル・値の操作方法

お世話になります。 [概要] 社員1より右のセルに値がある場合は下段にセルを挿入させ 必要なところに値を移動させたいのですがわかる方お願いします。 文言だけではわかりにくいと思い下記に図を挿入します。 [マクロ実行前] |部署|社員名1|社員番号1|社員名2|社員番号2|社員名3|社員番号3| -------------------------------------------------------------- |総務|太郎1  |2      | |営業|太郎2  |3      |太郎3  |4     | |積算|太郎4  |5      |太郎5  |6     |太郎6   |7     | [マクロ実行後] |部署|社員名1|社員番号1|社員名2|社員番号2|社員名3|社員番号3| -------------------------------------------------------------- |総務|太郎1  |2     | |営業|太郎2  |3     | |   |太郎3  |4     | |積算|太郎4  |5     | |   |太郎5  |6     | |   |太郎6  |7     | 又、社員名10ぐらいまで作成予定です。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

これはマクロを丸投げしているのですか? 修正がある場合はご自身でお願いしますね。 Sub Macro1() Dim idxR, idxC, ptr As Integer Dim ws As Worksheet  Set ws = ActiveSheet  Worksheets.Add after:=ws  ptr = 2  With ws   .Rows(1).Copy Destination:=Range("A1")   For idxR = 2 To .Range("A65536").End(xlUp).Row    Cells(ptr, "A").Value = .Cells(idxR, "A").Value    For idxC = 2 To 255 Step 2     If .Cells(idxR, idxC) = "" Then      Exit For     Else      .Cells(idxR, idxC).Resize(1, 2).Copy Destination:=Cells(ptr, "B")      ptr = ptr + 1     End If    Next idxC   Next idxR  End With End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択して実行します。

BSR123
質問者

お礼

良い回答ありがとうございます 教えて頂いた実行は確認済みでスムーズに動作が確認され安心致しました。 丸投げ等、結果申し訳ありません。 又、書式等大幅に誤差が生じ苦戦しています、もう少しのお力を頂ければ幸いです。

BSR123
質問者

補足

お返事ありがとうございます 修正等行おうとしたのですがなかなか思うように行きません 実行時エラー1004がでます ある程度の説明があれば幸いです。 結果丸投げ見たくなって申し訳ありません。 よろしくお願い申し上げます

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

(A)下記のようなことを考えたのか、考えてないのか、質問文に書いてないが、ここまでは、VBAを知らなくてもできることです。そしてこれこそVBAの初心者が力を入れないといけない点だと思います。 VBの文法を知っても、手足が出ないのは、この点の訓練が少ないからです。 (B)もうひとつ、Xシート(今あるシート)行を挿入するのでなく、別シート(シートYとする)に実現後のシートを作る方式を勧めます。挿入・削除は、その後の対象が動いてしまうことがあって、注意が必要で、かつ複雑になります。これは経験を積んで学ぶことです。 ーーー 処理ロジックの1例 1XシートA列のデータ最終行を知る 2.Xシート第1行から最終行までのデータで繰り返す。(3-4)繰り返しのループの中の入れ子にするということ。 3A・B列にデータあるか?あれば、YのA,B列にXの対象列を代入する。 Yシートの書き込み(代入)行(のポインタ)を下へづらすため+1する。 C,D;E、F列、・・など無ければ、Xシートの次行に処理をしに行く。 4.2列右に処理対象をずらして3.を行う。無くなるまで3を繰り返しする。 (できればYシートのA列は、いつもXシートのA列をセットする。 表示文字色を白にするなど見えなくするのがお勧め) ーー、 完成後の並び順位ついて、質問に述べてないが、ソートして並べ替える。 述べてないのは関心の無い証拠。仕事では大切な点です。 並べ変える順序を決める部コードを別途振らないといけないかも知れない。 ーー 考えている対象行や列を動かすには、Cells(i、j)のiやjを+1するとか、セルのOffset()プロパティを指定を変えるやり方を使う。

関連するQ&A

  • ダイアログボックスに自動的にセルの値を入れるには

    エクセルのマクロを実行したときに、「番号を入れてください」のダイアログボックスが出てくるのですが、その値がB1セルの値だとわかっているので自動的にB1セルの値を入れるようにするマクロ(VBEコード)がわかる方教えてください

  • セルの値によって、どちらのマクロを実行するか分岐?

    ■もしも A1セルの値が 「課長」「部長」という文字列を含んでいる場合は、    ”マクロA” を実行する。 ■そうではなく、 A1セルに、 「社長」「社員」という文字列があったなrば、 ”マクロBを実行する”  ・・・というマクロを作りたいのですが、教えていただけませんでしょうか。  どうぞ、よろしくお願いいたします。  

  • エクセルVBAで指定先のセルの値でデータ抽出

    エクセルVBAで作った売上帳シートのF2セルに顧客名を入力するようにしています。 その入力した顧客名のみの内容をオートフィルで抽出させるようにしたいのですが、うまくいきません。 Sub 顧客抽出() Range("B4").AutoFilter Field:=2, Criteria1:="山田太郎" End Sub でマクロを実行させるとできるのですが、『山田太郎』の部分は、F2セルに入力した顧客名で実行させたいのです。 どのようにすればできるのでしょうか?

  • VBA 結合セルの値を削除

    マクロ超初心者です。 C7~K7が結合されたセルの値を削除したいです。(値はC7に入力されています) Range("C7").MergeArea.ClearContents で実行してみたところ 実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と出てきます。 セルの書式設定をみてみると、保護/ロックにチェックが入っておりました。もしかしたらこれが悪さをしているのでしょうか。 分かりにくくて申し訳ありませんが、知恵を貸していただけたら助かります。よろしくお願いいたします。

  • VBA 指定値に最も近い値のセルの行番号は?

    A列に数値が昇順で並んでます。指定の値に最も近い値が並んでるセルの行番号を知りたいのです。 WorksheetFunction.vlookupを使うと、値は分っても行番号はわからない筈です。 Cells.Find().Row を使うと、行番号はわかりますが「最も近い」値はわからない筈です。 マクロを組め!との御指摘があるかも知れませんが、便利な関数があるのならそれで済ませたいです。何かありませんか?無ければ諦めます。

  • エクセルでセルの値が変更されたらマクロを実行

    エクセルで、セルの値が変更されたらマクロを実行したいと考えています。 具体的には、A1のセルに何か値が入力されるか、変更されたら、 作成したマクロを実行したいと考えています。 どうしたらいいのでしょうか。 ご教授ください。 よろしくお願いします。

  • VBA 固定セルから可変セルへのハイパーリンク

    VBA、マクロの記述方法を教えてください ハイパーリンク元:ワークシート1のA1セル ハイパーリンク先:ワークシート2のcells(リンク先セルの行番号,リンク先セルの列番号) リンク先セルの行番号、リンク先セルの列番号はいずれもINTEGERの変数名、でハイパーリンクを張ろうとする時点(段階)でマクロによって値が定義(付与)されているもの、とします

  • EXCEL VBA シート内の特定のセルに値が入…

    EXCEL VBA シート内の特定のセルに値が入力された際に処理を実行するプログラム EXCELシート内の特定のセルに値が入力された際に処理を実行するプログラムをEXCEL VBAで作成したいと考えています。 EXCELに計測データを取込み、このデータが設定値以外の場合のみ、トリガーを出す様なイメージで使いたいと思います。 どの様に考えれば良いでしょうか?サンプル等ありましたら紹介ください。 上記質問の”トリガー”について補足します。 あるセルに値が入力されたら、マクロを実行するという風にしたいという意味です。 単純にマクロ実行を手動で行うのでは無く、ある値が判定値以外の場合に他アプリケーションを操作したいという意味です。。

  • セルの値が変ると自動でマクロが実行される。

    セルの値が変ると自動でマクロが実行されるVBAを教えて下さいm(_ _ )m 例えば、シート1のA1の値が変ると、マクロAが実行される。 シート1のA2の値が変ると、マクロBが実行される。 と一つのシート内に複数のイベントを設置したのですが、イマイチわかりません。 知恵をお貸し下さい。

  • VBA セルの値を別セルにコピーするには

    VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _                  Paste:=xlPasteValues, _                  Operation:=xlNone, _                  SkipBlanks:=False, _                  Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。

専門家に質問してみよう