- ベストアンサー
Excel vba について
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 初心者で、 よく見る文言ですが、コレで何を言いたいのか ・学習の仕方がわからない ・作って(やって・調べて)みたがうまくいかない ・面倒だから誰か作って(やって・教えて) ・その他 どんな心理なのか、補足いただけると幸いです。 まぁ、とりあえず今回の案件は・・・そもそも、VBA必要? という素朴な疑問が大きく残りますが VBA学習中ってことだと思うので以下参考にどうぞ。 Dim TR As Long TR = Cells(Rows.Count, 3).End(xlUp).Row + 1 Cells(TR, 3) = Range("K8") Cells(TR, 4) = Range("K10") Cells(TR, 5) = Range("K12") Cells(TR, 6) = Range("K14") With Range(Cells(TR, 3), Cells(TR, 6)) With .Borders(xlEdgeLeft) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With .Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With .Borders(xlEdgeBottom) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With .Borders(xlEdgeRight) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With .Borders(xlInsideVertical) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With With .Borders(xlInsideHorizontal) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With End With Range("K8:K14").ClearContents こんなもんでできますね。 罫線はマクロの記録で取れますし、 難しいことは(質問の範囲においては)全く無いものと思います。 「セルへの入力」「変数への代入」「マクロの記録」、 VBAの学習を始めれば(書物でもWEBでも)数分で 辿り着く要件と思いますよ。 さぁ、次は 「不要な行を削除したい」 「写真ボタンを押したら、選択行の写真を表示したい」 「行が増えて、画面が行方向にスクロールしても入力部分を常に表示したい」 「行の数に合わせて写真ボタンを大きくしたい」 どれでしょう(笑)?
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
こういう質問をするとき、この課題に対して、VBAでどういう「要素」機能が要るか、考えるべきだ。その訓練をしないと、いつまでやっても上達しないと思う。 そのうち、わからない項目を質問に文章で列挙するべし。 質問する前に、Google照会すれば、ほとんで解説記事があるはず。 本件など丸投げで、シート画像だけ挙げて、内容は回答者まかせ。 本件では (1)最終行をとらえるコード (2)各セルの値を取得するするコード (3)同一行の各列にデータを代入する。 (4)本件ではK列のデータ行のデータを採る(VBAでの表現法)コード (5)はコマンドボタンらしいが、それがマウスでクリックされたとき のタイミングをとらえて、本件の処理をする仕組み しかし(添付画像からは)「セルの(イベント)しくみ」を使っているようでもある。普通はユーザーフォームを使ったりする。 初心者はイベントを使うのは不適と小生は思う。 これも明記できないようでは、この課題をするには早すぎる。 (1)は Sub test01() lr = Range("A10000").End(xlUp).Row MsgBox lr End Sub (2)はセルのCells(i,j)=Cells(i2,J2) i,i2は行番号、j,j2は列番号数字。 (3)はForNextで列番号jを1つづつずらして、データをセット (4)は本件セルの値らしいので、(3)と似ていて Cells(i,j)=Cells(i2,j2) ユーザーフォームを使う場合(このほうが多いだろう)は少し違う。 (5)セルでも出来なくはない。 ーーー 以下はコマンドボタンを「使わない」方法の一案。 参考なので、違えば無視してください。 下記(イベント利用法)は入力するには不安定で、お勧めできない。 セルの場合は、追加登録にK17セルをクリックするとして VBE画面でGeneralの方はWorksheetを選ぶ。 右側のイベントの方で、SelectionChangeを選ぶ。 すると Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub が出る。 その空白部にコードを入れる。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'MsgBox "AA" lr = Range("A1000").End(xlUp).Row If Target.Address = "$K$17" Then ’追加セルK17を選択したら MsgBox "追加します" For j = 1 To 4 Cells(lr + 1, j) = Cells(6 + 2 * j, "K") 'K列のデータを採る Cells(6 + 2 * j, "K") = "" Next j End If End Sub 入力セルの区別のため、K8,K10,K12,K14にセル色を設定しておく。 データをK8,K10,K12,K14に入力して、K17セル(追加の知らせ)を選択すると、最終行の次行のA-D列にセットされる。
- FEX2053
- ベストアンサー率37% (7995/21381)
セルC2~F2に、各々=K8,=K10,=K12,=K14という参照式を 設定、入力結果を一列に並べて罫線も引いておきます。 こうすれば単純に Range("C2:F2").Copy Range("C8").End(xlDown).Offset(1).Select ActiveSheet.Paste と、参照先をコピーするだけで済みます。