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

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

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

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

Q&A

4回答

334閲覧

VBAのループ処理書き方

mori_reta

総合スコア10

VBA

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

0グッド

2クリップ

投稿2020/07/08 02:49

VBAで年間の資金繰り表を作成しています。

更新ボタンを押した際にループ処理で月ごとに値が入力されるようにしたいです。
また、値が入力される式は作成済みなのでループで入力される際にCallで呼び出すようにしたいです。(式の名前:InputCalc)

支出・粗利益のなかの項目は増えることがあります。
iでは支出と粗利益を区別するループ、jではCallで値を入力していくループで構成を考えています。
コードの組み方がわからないので教えていただきたいです…

イメージ説明

VBA

1Sub Button1_Click() 2 3With Sheets("HOME") 4 5Dim i As Integer 6Dim j As Integer 7 8For i = 7 To .Cells(Rows.Count, 1).End(xlUp).Row 9 10 11End With 12 13End Sub

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

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

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

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

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

ttyp03

2020/07/08 02:53

InputCalc関数の入力パラメーター(引数)が不明です。 行の情報だけ渡せばいいのですか?
mori_reta

2020/07/08 03:02

行の情報だけで大丈夫です。お願い致します。
sage

2020/07/08 09:25

回答を作っておいてからの質問はおかしいですが... callで呼び出すのはサブルーチンであり、式ではありません(callで式を呼び出すことはできません)。 作成済の「値が入力される式」とはどういうものなのでしょうか? 式は通常、ひとつしか値を返しませんから複数のセルに一度で埋めることはできません。 「作成済の式」の機能が分からないと回答になりません(式の使い方が分かりません)。何を入力にして何を求める式なのでしょうか? また、やりたいことは(a)~(c)のどれですか? (a)更新ボタンを押すと作成済の式を使ってどこかから値を集めて(例えば)c7:c18に値を埋めてくれる。 (b)更新ボタンを押すと(例えば)c7:c18に(どこかから値を集める)作成済の式を埋めてくれる。 (c)その他(具体的に説明してください) (a)や(b)の場合、C~Nの全カラムなのか、特定のカラムだけなのか? (7月8日12:24の回答は(b)で特定のカラムだけのつもりで作成しています)
guest

回答4

0

excelやVBAにはAI機能はありません。「これやって」には反応しないのです。
コンピューターはこと細かく指示しないと動いてくれません。
(具体的にどのセルにどういう式や値を入れるかを教える必要があります)
支出と粗利益は合計だけならばiでループするよりも単純に2つの数式を書けばいいと思います。
8~13行目、15~18行目にも数式が入り、個々の数式の形式が違うのならば、個別に書くことになるだろうし、同じ形式ならばループ処理になると思います。
例えばc7セルに数式「=sum(c8:c13)」、c14セルに数式「=sum(c15:c18)」を入れるのならば

VBA

1cells(7,3).Formula="=sum(c8:c13)" 2cells(14,3).Formula="=sum(c15:c18)"

と書きます。(7,3)は7行目、3カラム目(=Cカラム)という意味です。
あとはこの(7,3)、(14,3)の3の部分を変数にしてループ処理すればいいのでは?

投稿2020/07/08 03:24

sage

総合スコア1216

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

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

0

ExcelVBA

1Option Explicit 2 3Sub test() 4 Dim rng表 As Range 5 Dim rngデータ As Range 6 Dim rng月 As Range 7 Dim rng費目 As Range 8 Dim ixRow As Long 9 Dim ixCol As Long 10 11 '表全体のセル範囲 12 Set rng表 = ActiveSheet.Range("A6") 13 'データ入力セル範囲 14 Set rngデータ = intersecr(rng表, rng表.Offset(1, 2)) 15 16 '費目列の各セルを巡回 17 For Each rng費目 In rngデータ.Rows(0).Cells 18 ixRow = ixRow + 1 '何行目か数える 19 '月別行のセルの巡回 20 For Each rng月 In rngデータ.Columns(0).Cells 21 ixCol = ixCol + 1 '何列目か数える 22 '行列を数えた位置に該当の値を転記 23 rngデータ(ixRow, ixCol).Value = _ 24 InputCalc(rng費目.Value, rng月.Value) 25 Next 26 Next 27End Sub

操作したいのは「セル」なので、まずは任意のセル範囲を取得できるようになりましょう。
参考になれば。

投稿2020/07/08 23:14

mattuwan

総合スコア2136

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

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

0

こんな感じはどうでしょうか。

vba

1Option Explicit 2Sub Test_Sample_Miniature() 3 4 Dim rngYYMM As Range 5 Dim rngPLArea As Range 6 Dim rngKamokuTop As Range 7 Dim rngKamoku As Range 8 9 Dim MyRange As Range 10 Dim TargetCol As Long 11 Dim TargetRow As Long 12 Dim strInputData As String 13 Dim strBLFlag As String 14 15 '初期値セット 16 Set rngYYMM = Range("C6:N6") 17 Set rngPLArea = Range("A7:A1000") 18 Set rngKamokuTop = Range("B7") 19 TargetCol = 0 20 TargetRow = 0 21 strBLFlag = "" 22 23 '更新月の取得 24 strInputData = InputBox("更新対象月を入力", "条件", "10月") 25 For Each MyRange In rngYYMM 26 If InStr(MyRange, strInputData) <> 0 Then 27 TargetCol = MyRange.Column 28 Exit For 29 End If 30 Next 31 If TargetCol = 0 Then MsgBox "入力月が存在しません": Exit Sub 32 33 '損益計算勘定科目の取得 34 For Each MyRange In rngPLArea 35 If MyRange = "支出" Then strBLFlag = "LOSS" 36 If MyRange = "粗利益" Then strBLFlag = "FROFIT" 37 Set rngKamoku = Cells(MyRange.Row, rngKamokuTop.Column) 38 If Trim(rngKamoku) <> "" Then 39 Call InputCalc(strBLFlag, rngKamoku.Value, MyRange.Row, TargetCol) 40 End If 41 'A/B列空白ならば終了 42 If Trim(MyRange) = "" And Trim(rngKamoku) = "" Then Exit For 43 Next 44 45 '解放 46 Set rngYYMM = Nothing 47 Set rngPLArea = Nothing 48 Set rngKamokuTop = Nothing 49 Set rngKamoku = Nothing 50End Sub 51 52'計算関数側へ引き渡し 53Function InputCalc( _ 54ByVal 損益名 As String, _ 55ByVal 科目名 As String, _ 56ByVal 行位置 As Long, _ 57ByVal 列位置 As Long _ 58) 59 Debug.Print 損益名 & " - " & 科目名 & " - " & 行位置 & " - " & 列位置 60End Function

投稿2020/07/08 04:44

tosi

総合スコア553

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

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

0

InputCalcに行の情報だけ渡せばいいとのことなので。
変数jは使ってないのでコメントアウトしています。

VBA

1Sub Button1_Click() 2 3 Dim i As Integer 4 'Dim j As Integer 5 6 With Sheets("HOME") 7 8 For i = 7 To .Cells(Rows.Count, 1).End(xlUp).Row 9 Call InputCalc(i) 10 Next 11 12 End With 13 14End Sub 15

投稿2020/07/08 04:03

ttyp03

総合スコア16996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問