Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2837 / 13645 ツリー ←次へ | 前へ→

【65652】入力した数値分の表を作成したい あや 10/6/18(金) 16:23 質問[未読]
【65656】Re:入力した数値分の表を作成したい Jaka 10/6/18(金) 16:58 発言[未読]
【65658】Re:入力した数値分の表を作成したい あや 10/6/18(金) 17:04 質問[未読]
【65662】Re:入力した数値分の表を作成したい 芋洗い五段 10/6/18(金) 23:41 回答[未読]
【65666】Re:入力した数値分の表を作成したい neptune 10/6/19(土) 13:40 発言[未読]
【65677】Re:入力した数値分の表を作成したい あや 10/6/21(月) 15:51 お礼[未読]

【65652】入力した数値分の表を作成したい
質問  あや  - 10/6/18(金) 16:23 -

引用なし
パスワード
   セルA1に 1〜100の数字を入力し、Enterすると
入力した数値分の表を作成したい。

【表1】
       A        B      C
1      1
2  ナンバー     商品名     金額     
3     1 
4                    =sum(A3:A3)

【表2】
       A        B      C
1      5
2  ナンバー     商品名     金額     
3     1 
4     2
5     3
6     4
7     5
8                    =sum(A3:A5)

- 考えたこと -
下記マクロにて 入力した数値分、行挿入で対応をしようとしましたが
A1の変更をした場合、どんどん行が増えていきます。
A1の数値が減った場合の対応も出来ません。

Private Sub Worksheet_Change(ByVal Target As Range)

  If Intersect(Target, Range("A1")) Is Nothing Then

    Exit Sub

  Else

    Application.CutCopyMode = False
    Range("3:" & Int行数).Insert

  Endif

End sub

数値が1なら、表1(基準)のまま
数値が2なら3〜4の表にし、5行にSUM関数を入れる
数値が3なら3〜5の表にし、6行にSUM関数を入れる

一度、10にしたものを4にした場合 1〜4の表にする
一度、5にしたものを10にした場合 1〜10の表にする


足りない情報があれば、追記します。
考え方を頂ければ調べながら作成していきたいと思います。
調べながらになるので
確認が遅くなるかもしれませんが、よろしくお願いいたしますm(_ _)m

【65656】Re:入力した数値分の表を作成したい
発言  Jaka  - 10/6/18(金) 16:58 -

引用なし
パスワード
   考え方ですが、追加とか削除より、いっそクリアして新規に作った方が、
頭が混乱しにくいかもしれませんね。
行数が多い場合、1行づつ書き込むと遅くなるかと思いますけど...。
こういう考え方のが、作成する基準が1種類だけなので、整理しやすいと思います。

セルに書き込むのが遅いと気づけば、配列を使って一気に書きもとかも考えられるし。

【65658】Re:入力した数値分の表を作成したい
質問  あや  - 10/6/18(金) 17:04 -

引用なし
パスワード
   Jakaさん 書き込みありがとうございます。

説明不足で申し訳ありません。

商品名・金額を入力後、
A1の数値を変えたりすることがあると予想されるので
クリアは出来ないのです。

仮に、ナンバー2に商品名・金額を入力後
A1の数値を1にした場合
Msgboxにて、
「データが入力されている行が削除されますがよろしいですか」といった
メッセージを出そうと思っています。

【65662】Re:入力した数値分の表を作成したい
回答  芋洗い五段  - 10/6/18(金) 23:41 -

引用なし
パスワード
   以前に入ってた数値を取得するためにB1にA1をコピーしとくポヨ
あと合計するのは金額じゃないポヨ?勝手にC列にしたポヨ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim a, b
a = Target
If Target.Row <> 1 Or Target.Column <> 1 Or IsNumeric(a) = False Then Exit Sub
If a < 1 Then Exit Sub
Application.EnableEvents = False 'セルをいじると再びここが呼び出されるためイベントを無効に
If Cells(1, 2) <> a Then Cells(Cells(1, 2) + 3, 3) = ""
Cells(1, 2) = a
Columns(1).Clear
Cells(1, 1) = a
Cells(2, 1) = "ナンバー"
Cells(a + 3, 3) = "=sum(C3:C" & a + 2 & ")"
For b = 3 To a + 2
Cells(b, 1) = b - 2
Next
Application.EnableEvents = True 'イベント復活
End Sub

【65666】Re:入力した数値分の表を作成したい
発言  neptune  - 10/6/19(土) 13:40 -

引用なし
パスワード
   ▼あや さん:

>足りない情報があれば、追記します。
足りるか足りないかも判断できないので、基本的な手順だけ

0.ナンバー     商品名     金額 は入力済とする:タイトルと呼ぶ
1.タイトル以下の既に入力されているデータを削除する
2.入力された数値を取得 =a とする。
3.繰り返し文を使用して、1、の個数だけ1〜aまでの番号を入力
4.C列のタイトルからa+1の行に計算式を入力する
5.再計算

【65677】Re:入力した数値分の表を作成したい
お礼  あや  - 10/6/21(月) 15:51 -

引用なし
パスワード
   芋洗い五段さん、neptuneさん
書き込みありがとうございます。

該当セルに数値を入力したとき
*数値に変更がない場合
 変化無し
*数値が前回の数値より大きかった場合
 前回の行数+最終行の次行から、今回増えた行数を挿入
*数値が前回の数値より少なかった場合
 削除してもよいかのメッセージを出し
  YESの場合
   クリアして、数値行の挿入
  NOの場合
   変化無し

これをマクロに書き込んで
思ったとおりの動きになりました^ー^

勉強になりましたm(_ _)m

2837 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free