ここから質問投稿すると、最大10000ポイント当たる!!!! >>

エクセルのsheet1にこのような表があります。
A B C D E
1 名称 金額
2 あああああ 10000
3 あああああ 12000
4 あああああ 9000
5 いいいいい 9500
6 いいいいい 11000
7 ううううう 15000
8 えええええ 12000
9 おおおおお 10000
10 おおおおお 14000
11 かかかかか 13000
12 ききききき 800

以下多数

この表で、それぞれ同じ名称の個数と合計金額を求めたいのです。
たとえば「ああああ」なら個数 3、合計 31000 と、D4とE4に、
「いいいい」なら個数 2、合計 25000 と、D6とE6に入れたいのです。
実際の表はデータ件数が1万件を越えますのでいちいち手で入れるわけにはいきません。
VBAでやるにはどう記述したらいいでしょうか?
どうかお助けください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

A列は名称でB列は金額でよろしいんですよねというか


その前提で書きましたが。
デバッグはしてません。またオーバーフロー等あると思うのでそのあたりはご自分で。

Sub 集計()
Dim i, MyTotal As Double, MyCount As Double
MyTotal = Sheets(1).Range("A2")(1, 2)
MyCount = 1
For i = 2 To 65535
If Sheets(1).Range("A2")(i) = "" Then Exit For
If Sheets(1).Range("A2")(i) = Sheets(1).Range("A2")(i - 1) Then
MyTotal = MyTotal + Sheets(1).Range("A2")(i, 2)
MyCount = MyCount + 1
Else
Sheets(1).Range("A2")(i - 1, 4).Formula = MyCount
Sheets(1).Range("A2")(i - 1, 5).Formula = MyTotal
MyTotal = Sheets(1).Range("A2")(i, 2)
MyCount = 1
End If
Next i
Sheets(1).Range("A2")(i - 1, 4).Formula = MyCount
Sheets(1).Range("A2")(i - 1, 5).Formula = MyTotal
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございました。
思った通りにできました。
感謝感激です。

お礼日時:2003/05/15 19:42

1行目が項目行、2行目以降がデータ行として



Sub 集計()
Dim i As Long
Dim x As Long, y As Long
y = 1

For i = 2 To 12000'(ここはデータの最終行にする)

With Sheet1

If .Range("A" & i) <> .Range("A" & i - 1) Then

.Range("D" & i - 1) = i - y
.Range("E" & i - 1) = _
Application.WorksheetFunction.Sum(.Range("B" & y & ":" & "B" & i - 1))

y = i

End If
End With
Next i
End Sub

わたしも初心者なのでVBAの書き方が悪いかもしれませんがテストして動きました。
    • good
    • 1
この回答へのお礼

ありがとうございました。
思った通りにできました。
いろいろなやり方があるんですね!
感謝感激です。

お礼日時:2003/05/15 19:43

ピボットテーブルを作成してみてはいかがですか?


慣れれば簡単に集計表が作成できると思います。
どうしても自動化させたければ
作業をマクロに記録させるのが簡単なのでお勧めです。

・方法
データ(D)→ピボットテーブルとピボットグラフレポート(P)を実行すると
ウィザードが表示されますので、集計したいデータの範囲を指定してください。
次に、集計表を作成したい場所を指定します。

行フィールドに名称をドラッグし、データアイテムに金額を2回ドラッグします。
名称、データ(合計:金額、合計:金額2)の集計表が作成されますので
「合計:金額2」となっている項目を選択し、右クリックでショートカットメニューを表示させます。
フィールドの設定(E)を実行し、集計の方法(S)の「データの個数」を選択してください。

項目の位置を変えたかったりした場合は
項目を選択してドラッグしてください。
    • good
    • 1
この回答へのお礼

ありがとうございました。
今回はVBAで思った通りにできました。
ピボットテーブルは使った事がないので勉強します。

お礼日時:2003/05/15 19:44

データ件数が 1万件ぐらいあるならば、アクセスとか


使ったほうがいいですよ。

エクセルだけで やりたい場合は
COUNTIF とか SUNIF とか使えばできます。
使い方は、エクセルで入力するときに出てくるでしょう。

VBAでなくてもできます。

この回答への補足

ありがとうございます。
アクセスですよねえ、やっぱりこういうデータ量だと。
でも残念ながらアクセスは難しくて使った事が無いんです。
関数でやってみようかとも思いましたが、この作業はこれからよく出てくると思われるので、できればVBAでの処理をしたかったのです。

補足日時:2003/05/15 11:07
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcel vba 複数項目の集計

EXCEL2003 VBAにてマクロを作成しているのですが、作成日程が迫っているにも関わらず、
すぐ行き詰ってしまいます。どうかご指導お願い致します。

以下のような事をしたいのですが、できる限り高速で最も効率の良い方法を教えていただきたいと
思っております。よろしくお願い致します。

あるSheetに以下のようにデータが登録されていて、
A       B        C
りんご    赤       200
なし     黄色      100
りんご    緑       100
メロン    緑       10
なし     黄色      200
りんご    緑       500

これを集計すると、
りんご  赤  200
りんご  緑  600
なし   黄色 300
メロン  緑  10
と、結果を返したいと考えています。

数字を合計するのはA列とB列がともに一致した時のみです。

最初は単純に何回もForNextで処理しようと思ったのですが、行数が
多くなると繰り返し回数も多くなり、時間もかかってしまうので、
別の方法でもっといい方法があればと思い、質問させていただきました。
宜しくお願いします。

EXCEL2003 VBAにてマクロを作成しているのですが、作成日程が迫っているにも関わらず、
すぐ行き詰ってしまいます。どうかご指導お願い致します。

以下のような事をしたいのですが、できる限り高速で最も効率の良い方法を教えていただきたいと
思っております。よろしくお願い致します。

あるSheetに以下のようにデータが登録されていて、
A       B        C
りんご    赤       200
なし     黄色      100
りんご    緑       100
メロン    緑   ...続きを読む

Aベストアンサー

自前で検索するのをやめて Scripting.Dictionaryオブジェクトに任せるなら

Sub Test()
  Dim dicName As New Dictionary
  Dim r As Range
  Dim dicCor As Dictionary
  Dim sName, sColor, obj
  Dim nn As Integer

  ' データの集計
  For Each r In Range("A2", Range("A65536").End(xlUp))
    ' りんご、なし、メロンなどを取得
    sName = r.Value
    ' 色を取得
    sColor = r.Offset(, 1).Value
    ' 値段を取得
    nn = r.Offset(, 2).Value
    ' dicNameに登録済みか検査
    If dicName.Exists(sName) = False Then
      ' 未登録なら 色、値段を登録
      Set dicCor = New Dictionary
      dicCor.Add sColor, nn
      dicName.Add sName, dicCor
    Else
      ' 登録済みの場合 色情報を検査
      Set dicCor = dicName(sName)
      If dicCor.Exists(sColor) = False Then
        ' 色情報が未登録なら 新規登録
        dicCor.Add sColor, nn
      Else
        ' 色情報があるなら 値段を更新
        nn = dicCor(sColor) + nn
        dicCor(sColor) = nn
      End If
      ' 色情報を更新
      Set dicName(sName) = dicCor
    End If
  Next

  ' 出来上がったデータを表示
  For Each sName In dicName
    Set dicCor = dicName(sName)
    For Each sColor In dicCor
      n = dicCor(sColor)
      ' セルに転記するなら Rangeなどに置き換えましょう
      Debug.Print sName, sColor, nn
    Next
  Next
End Sub
といった具合で ・・・

自前で検索するのをやめて Scripting.Dictionaryオブジェクトに任せるなら

Sub Test()
  Dim dicName As New Dictionary
  Dim r As Range
  Dim dicCor As Dictionary
  Dim sName, sColor, obj
  Dim nn As Integer

  ' データの集計
  For Each r In Range("A2", Range("A65536").End(xlUp))
    ' りんご、なし、メロンなどを取得
    sName = r.Value
    ' 色を取得
    sColor = r.Offset(, 1).Value
    ' 値段を取得
    nn = r.Offset(, 2).Value
    ...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QExcel VBAでグループ毎に集計する方法

ExcelのVBAについて教えてください。

A列 B列
OK 9/21
OK 9/21
NG 9/20
OK 9/20
NG 9/21

とセルに入力されていたときに、各日付ごとにOK、NGの発生回数を出す
場合はどのようにすれば良いのでしょうか?
9/20 OK:1個、NG:1個
9/21 OK:2個、NG:1個

大量のデータを扱うため、できるだけ早い処理方法で実現できる方法を希望しています。

Aベストアンサー

日付順にソートして上から見ていくのが普通の手法ですが
できるだけ早い処理方法で、ということなので、少し捻ってみました。

・データ数 : 6万行
・日付 : 2009/1/1 ~ 2009/12/31 の間でランダム
の場合、私の環境だと0.2秒ほどで結果が出ます。

'=====↓ ココカラ ↓================================================
Sub Sample()
 Dim orgAry  As Variant
 Dim sumAry() As Long
 Dim dayCnt  As Long
 Dim rtnAry() As Long
 Dim i    As Long
 Dim j    As Long
 
 'とりあえず1982年から2036年まで対応
 ReDim sumAry(30000 To 50000, 0 To 2)
 
 'アクティブシートの、A:B列のデータを読み込む
 With ActiveSheet
  orgAry = Intersect(.UsedRange, .Range("A:B")).Value
 End With
 
 For i = 1 To UBound(orgAry, 1)
  If sumAry(orgAry(i, 2), 0) = 0 Then
   sumAry(orgAry(i, 2), 0) = 1
   dayCnt = dayCnt + 1
  End If
  Select Case orgAry(i, 1)
   Case "OK": sumAry(orgAry(i, 2), 1) = sumAry(orgAry(i, 2), 1) + 1
   Case "NG": sumAry(orgAry(i, 2), 2) = sumAry(orgAry(i, 2), 2) + 1
  End Select
 Next i
 
 ReDim rtnAry(1 To dayCnt, 1 To 3)
 j = 1
 For i = LBound(sumAry, 1) To UBound(sumAry, 1)
  If sumAry(i, 0) = 1 Then
   rtnAry(j, 1) = i
   rtnAry(j, 2) = sumAry(i, 1)
   rtnAry(j, 3) = sumAry(i, 2)
   j = j + 1
  End If
 Next i
 
 'アクティブシートのC1セル以下に結果を書き出す
 With ActiveSheet
  .Range("C1").Resize(dayCnt, 3).Value = rtnAry
  .Range("C1").Resize(dayCnt, 1).NumberFormatLocal = "yyyy/mm/dd"
 End With
 
End Sub
'=====↑ ココマデ ↑================================================

以上ご参考まで。

日付順にソートして上から見ていくのが普通の手法ですが
できるだけ早い処理方法で、ということなので、少し捻ってみました。

・データ数 : 6万行
・日付 : 2009/1/1 ~ 2009/12/31 の間でランダム
の場合、私の環境だと0.2秒ほどで結果が出ます。

'=====↓ ココカラ ↓================================================
Sub Sample()
 Dim orgAry  As Variant
 Dim sumAry() As Long
 Dim dayCnt  As Long
 Dim rtnAry() As Long
 Dim i    As Long
 Dim j    As Long...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QExcel VBAの SUM関数について質問です。

Excel VBAの SUM関数について質問です。

SUM関数で合計の値を出す場合、

SUM(A1:A5)という関数で合計を出しますが

SUM(sheet2.cells(1,1),sheet2.cells(5,1))
と言ったようにCellsで指定はできないのでしょうか?

複数の列にVBAのプログラムで合計の値を出したいのです。

WorksheetFunction.SumではSUM(A1:A5)のように
自動計算にならないと思うので・・・

Aベストアンサー

例えば、Sheet2のA6セルに質問の数式を入力するのであれば次のようにします。
Worksheets("Sheet2").Cells(6, 1).Formula = "=SUM(" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"

Sheet1のような別シートのA1セルに質問の数式を入力するのであれば次のようにします。
Worksheets("Sheet1").Cells(1, 1).Formula = "=SUM(Sheet2!" & Cells(1, 1).Address & ":" & Cells(5, 1).Address & ")"

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Qエクセル VBA セルの個数を所得する

いつも皆様には大変お世話になっております。

早速の質問ですが、

    A    B     C     D     E
1
2       123
3       123
4       123
5       123
6
7       123
とエクセルのセルがなっている場合の
上のB2から下のB7までのセルの個数を所得したいのです
B8以降にも数字が入る場合があるのと間に空白が入る場合があるので
困っています。
B2のセルは固定となっているのでB2からの判別で問題ない状況です。
どうぞ皆様お知恵をお借りしたく思っておりますのでよろしくお願いいたします。

Aベストアンサー

質問が非常に不明確なのですが・・・

所得?取得ですよね?

単にB2:B7のセルの個数をVBAで取得するなら
MsgBox Range("B2:B7").Count

B2:B7の空白でないセルの個数なら
MsgBox Application.CountA(Range("B2:B7"))

B7まででなくB2からB列のデータがある最後までのセル個数なら
MsgBox Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count

B2からB列のデータがある最後までの空白でないセル個数なら
MsgBox Application.CountA(Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング