人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

前回と同じく簡単入力のマクロについての質問です。

Sub SELECT_AC()
修正行 = 0

If ActiveSheet.Name = "DATA" Then
GYOU = ActiveCell.Row
修正行 = GYOU
RETU = Worksheets("入力").Range("a5").CurrentRegion.Count
For I = 1 To RETU
j = I + 3
Worksheets("入力").Cells(j, 2) = Worksheets("DATA").Cells(GYOU, I).Value
Next I
Sheets("入力").Select

ss = Str(修正行)
If 状態 = "修正" Then Range("b2") = ss & " 行目 修正中"
If 状態 = "流用" Then Range("b2") = ss & " 行目 流用中"

Range("B4").Select
End If

End Sub

--------------------------------------
入力シートのA列とB列の間に1行増やしたいのですがうまくいきません。どう直せばいいのでしょうか?
また、このマクロを詳しく解説していただきましたら助かります。


●質問者: mika555
●カテゴリ:コンピュータ
✍キーワード:b2 B4 name NeXT SELECT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント ベストアンサー

シートの書式を変えると、いろいろなところに影響がでるので、気をつけて作業をして下さい。


この処理に関しては下記のように変更になります。

Sub SELECT_AC()
 修正行 = 0

 If ActiveSheet.Name = "DATA" Then
 GYOU = ActiveCell.Row
 修正行 = GYOU
 RETU = Worksheets("入力").Range("a5").CurrentRegion.Count
 For I = 1 To RETU
 j = I + 3
 Worksheets("入力").Cells(j, 3) = Worksheets("DATA").Cells(GYOU, I).Value
 Next I
 Sheets("入力").Select
 
 ss = Str(修正行)
 If 状態 = "修正" Then Range("C2") = ss & " 行目 修正中"
 If 状態 = "流用" Then Range("C2") = ss & " 行目 流用中"
 
 Range("C4").Select
 End If
End Sub

気をつけてみるべき場所は Cells と Range です。

A列とB列の間に一行つかするならば、「入力シート」(DATAシートは変更しない)のB列以降の

Range の最初のアルファベット部分をB以降一つずつずらします。

例:
 Range("B2")⇒Range("C2")
 Range("C5")⇒Range("D5")
 Range("D7")⇒Range("E7")

また、Cells の後ろの数値も一つずつ増やします。

例:
 Cells( 2, 2 )⇒Cells( 2, 3 )
 Cells( j, 2 )⇒Cells( j, 3 )
 Cells( GYOU, I )⇒Cells( GYOU, I + 1 )

※入力シートに関する部分は他の処理もすべて同様の変更が必要です。



セル関連の基本的なマクロ(範囲指定、セルに入力、値の取得)


2 ● きゃづみぃ
●35ポイント

>また、このマクロを詳しく解説していただきましたら助かります。

質問にあるマクロを 詳しく説明します。

修正行 = 0

修正行という変数に0をセットします。

If ActiveSheet.Name = "DATA" Then

アクティブになっているシート名が "DATA"の時に End If までの処理をします。

質問のマクロでは すべてですが。

GYOU = ActiveCell.Row

選択中のセルの行番号を GYOUという変数にセットします。

RETU = Worksheets("入力").Range("a5").CurrentRegion.Count

入力のシートのA5セル近辺のアクティブ セル領域の数をRETUの変数にセットします。

For I = 1 To RETU

その RETUの数分を Next I まで ループ処理します。

j = I + 3

Jに I+3をセットします。Iは ループの数で 一回ループするごとに +1 されます。

Worksheets("入力").Cells(j, 2) = Worksheets("DATA").Cells(GYOU, I).Value

入力のシートのセルに DATAのシートのセルの値を セットします。

入力側の行と列は jと2

DATA側の行と列は GYOUとI



Sheets("入力").Select

入力シートを選択します。


ss = Str(修正行)

修正行の値を文字列にします。

後ほど、文字列と連結するために 変換しています。

If 状態 = "修正" Then Range("b2") = ss & " 行目 修正中"

状態の変数の値が "修正" ならば B2のセルに ss & " 行目 修正中" をセットします。

If 状態 = "流用" Then Range("b2") = ss & " 行目 流用中"

状態の変数の値が "流用" ならば B2のセルに ss & " 行目 流用中" をセットします。


http://q.hatena.ne.jp/1191306336

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ