- ベストアンサー
16桁の数が何種類あるかをカウントし、使用したい方法
- 以下のようにA列に16桁の数があります。これが何種類あるかをカウントし、その数を行数として使用したい方法を教えてください。
- 質問者は、A列に16桁の数が複数存在しており、その数が何種類あるかを知りたいと考えています。また、その数を行数として使用したいとのことです。
- 16桁の数がA列に複数存在している場合、カウントしてその数を行数として使用する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ANo.4です。補足に対して回答していませんでしたので、追加します。 次のようにすればよいと思います。 Range("D2:F2").Copy Range(Cells(3, 4), Cells(2 + Count, 4)).Select ActiveSheet.Paste Application.CutCopyMode = False もし"D2:F2"も含めてカウントした行数分という意味であれば、2行目を次のように変更してください。 Range(Cells(3, 4), Cells(1 + Count, 4)).Select
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
#2の回答者です。 >次にRange("D2:F2")にある数式をコピーして、D3から教えていただいたカウントした行数分 >貼り付けしたいのです。 ---中略-- >としたのですが、ActiveSheet.Paste のところがエラーになります。 それだけの情報ですと難しいですが、数式をコピーするということは以下のようになります。 言い換えると、同じ幅を平行移動させるわけです。左端の部分を揃えるか、全体の範囲を指定するか、どちらかです。 × .Range("D3", .Cells(i, 3)).Select ↓ ○ .Range("D3", .Cells(i, 4)).Select '3を4に替える-左端をあわせる または、 ○ .Range("D3", .Cells(i, 6)).Select '3を6に替える 6->F列 コピー先全体を広げる という条件のみです。 '// Sub Test3() 'フィルターオプションを利用する Dim r As Range Dim i As Long With ActiveSheet Set r = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)) r.AdvancedFilter Action:=xlFilterInPlace, Unique:=True i = Application.Subtotal(3, r) .ShowAllData If Application.CountIf(r, .Cells(1, 1)) > 1 Then i = i - 1 ((項目行がないので、1行目を項目としているか判定) End If .Range("D2:F2").Copy .Range("D3", .Cells(i, 6)) '追加部分 End With End Sub
- hananoppo
- ベストアンサー率46% (109/235)
ちょっと無駄なところがあったので修正します。 Sub Macro1() Dim RowNum As Long Dim Count As Long RowNum = 1 Count = 1 Do RowNum = RowNum + 1 If Cells(RowNum, 1).Value = "" Then Exit Do If Cells(RowNum, 1).Value <> Cells(RowNum - 1, 1).Value Then Count = Count + 1 Loop Range(Cells(1, 2), Cells(Count, 2)).Select End Sub
補足
とてもシンプルなマクロですが、簡単に解説いただけないでしょうか。どこで(重複分を1として)カウントしているのかが良く分かりません。また若干多くカウントされているようです。
- hananoppo
- ベストアンサー率46% (109/235)
こんな感じでどうでしょう。 Sub Macro1() Dim RowNum As Long Dim Count As Long RowNum = 1 Count = 1 Do RowNum = RowNum + 1 If Cells(RowNum, 1).Value = "" Then Exit Do Else If Cells(RowNum, 1).Value <> Cells(RowNum - 1, 1).Value Then Count = Count + 1 End If Loop Range(Cells(1, 2), Cells(Count, 2)).Select End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
この質問のネックは、16桁を利用するということで、Excelでは、そのままでは数値として認知できませんので、それを文字列においてあげないといけません。 以下は、どれも満足したプロシージャではありませんが、あえて、VBAとして格好がついているのは、Test3()のプロシージャだと思います。 Sub Test1() '関数を利用する Dim r As Range Dim i As Long Dim cnt As Long Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp)) For i = 1 To r.Rows.Count If i = Application.Match(r.Cells(i, 1).Value, r, 0) Then cnt = cnt + 1 End If Next Range("B1", Cells(cnt, 2)).Select End Sub Sub Test2() '配列数式を利用する Dim rng As Range Dim sRng As String Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp)) sRng = r.Address i = Evaluate("SUM((MATCH(" & sRng & "," & sRng & ",0)=ROW(" & sRng & "))*1)") Range("B1", Cells(i, 2)).Select End Sub Sub Test3() 'フィルターオプションを利用する Dim r As Range Dim i As Long With ActiveSheet Set r = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)) r.AdvancedFilter Action:=xlFilterInPlace, Unique:=True i = Application.Subtotal(3, r) .ShowAllData If Application.CountIf(r, .Cells(1, 1)) > 1 Then i = i - 1 ((項目行がないので、1行目を項目としているか判定) End If .Range("B1", .Cells(i, 2)).Select End With End Sub
補足
Sub Test3() を使用させていただきました。ありがとうございます。ただ、次の問題が発生しました。 引き続きお助け下さい。 下から3行目の .Range("B1", .Cells(i, 2)).Select の範囲に数式を貼り付けます。ここまではできました。 次にRange("D2:F2")にある数式をコピーして、D3から教えていただいたカウントした行数分 貼り付けしたいのです。 Range("D2:F2").Select Selection.Copy .Range("D3", .Cells(i, 3)).Select ActiveSheet.Paste としたのですが、ActiveSheet.Paste のところがエラーになります。 是非、よろしくお願いします。
- GOCHISOUda
- ベストアンサー率34% (50/144)
Sub 教えて() Range("C1").FormulaArray = _ "=SUM(IF(FREQUENCY(A1:A13, A1:A13)>0, 1, 0))" r = Range("C1") アドレス = "B" & r Range(アドレス).Activate End Sub
補足
早速の御回答ありがとうございます。 =SUM(IF(FREQUENCY(A1:A13, A1:A13)>0, 1, 0)) の部分が正しい値(ここでは「5」)を出してくれないのですが、.....。
お礼
ありがとうございました。無事思い通りに作動しました。