Excel VBA質問箱 IV

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

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


9064 / 13646 ツリー ←次へ | 前へ→

【29510】日にちを数えたい。 あさこ 05/10/6(木) 18:48 質問[未読]
【29513】Re:日にちを数えたい。 Statis 05/10/6(木) 20:02 回答[未読]
【29517】Re:日にちを数えたい。 ichinose 05/10/6(木) 20:39 発言[未読]
【29520】Re:日にちを数えたい。 Statis 05/10/6(木) 20:53 発言[未読]
【29554】Re:日にちを数えたい。 あさこ 05/10/7(金) 13:28 お礼[未読]
【29539】Re:日にちを数えたい。 あさこ 05/10/7(金) 11:10 お礼[未読]

【29510】日にちを数えたい。
質問  あさこ  - 05/10/6(木) 18:48 -

引用なし
パスワード
   いつもお世話になっています。

すみません、質問ですが、
エクセルのA〜W列に日付を入力したとして、
同じ行に同じ日付が入っていた場合、
トータルの日数をZ列に返したい場合どうしたらいいですか?

例:
学校にいく日を求めたい。
A列に名前
b列に国語
c列に算数
d列に社会
e列に英語
各行に日付(9月1日とか)を入力

で、たろう君は1行目で国語は9月1日、算数9月1日、社会9月10日、英語10月5日
とした場合、たろう君は何日学校に行かなければならないかを自動的に知りたい。

という例でいかがでしょうか?

【29513】Re:日にちを数えたい。
回答  Statis  - 05/10/6(木) 20:02 -

引用なし
パスワード
   こんにちは

データシート=Sheet1としSheet2を作業用に使います

ではお試しを

Sub Test()
Dim Ms As String, i As Long, R As Range, Co As Long
  With Worksheets("Sheet1")
    .Range("A1").CurrentRegion.Copy
    Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteAll, , , True
    Application.CutCopyMode = False
  End With
  With Worksheets("Sheet2")
     For i = 2 To .Range("A1").End(xlToRight).Column
       .Columns(i).AdvancedFilter xlFilterInPlace, , , True
       Set R = .Range(.Cells(2, i), .Cells(65536, i).End(xlUp)) _
                 .SpecialCells(xlCellTypeVisible)
       Co = R.SpecialCells(xlCellTypeConstants).Cells.Count
       Set R = Nothing
       .ShowAllData
       Ms = Ms & .Cells(1, i).Value & "君は" & Co & "日間登校します" & Chr(10)
       Co = 0
     Next i
     .Cells.Clear
  End With
  MsgBox Ms
End Sub

【29517】Re:日にちを数えたい。
発言  ichinose  - 05/10/6(木) 20:39 -

引用なし
パスワード
   あさこ さん、Statis さん、こんばんは。
>すみません、質問ですが、
>エクセルのA〜W列に日付を入力したとして、
>同じ行に同じ日付が入っていた場合、
>トータルの日数をZ列に返したい場合どうしたらいいですか?
>
>例:
>学校にいく日を求めたい。
>A列に名前
>b列に国語
>c列に算数
>d列に社会
>e列に英語
>各行に日付(9月1日とか)を入力
>
>で、たろう君は1行目で国語は9月1日、算数9月1日、社会9月10日、英語10月5日
>とした場合、たろう君は何日学校に行かなければならないかを自動的に知りたい。
>
>という例でいかがでしょうか?
ユーザー定義関数です。
標準モジュールに
'======================================
Function Dupcount(rng As Range) As Long
  Dim wk1 As Double
  Dim wk2 As Long
  wk1 = 0
  For Each crng In rng
    wk2 = WorksheetFunction.CountIf(rng, crng)
    If wk2 <> 0 Then wk1 = wk1 + 1 / wk2
    Next
  Dupcount = WorksheetFunction.Round(wk1, 0)
End Function

仮に

あるシートのA1から

  A   B   C   D   E   F

1 名前  国語  算数  社会  英語  日数
2 太郎 9月1日 9月1日 9月10日 10月5日 =dupcount(B2:E2)

なんて指定してみて下さい。
この場合なら 「3」という結果を表示します。

ただし、9月1日等の日付は文字列ではなく、書式が日付に設定されたセルとします。

実は、配列数式を使用すれば、数式だけでも可能なのですが、
今回はユーザー定義関数を選択しました。

試してみて下さい。

【29520】Re:日にちを数えたい。
発言  Statis  - 05/10/6(木) 20:53 -

引用なし
パスワード
   ichinoseさん今晩は。
>実は、配列数式を使用すれば、数式だけでも可能なのですが
私も考えたのですが.....
>ユーザー定義関数です。
あまり使ったことがないので浮かびませんでした。
こちらの方がすっきりして良いですね。

【29539】Re:日にちを数えたい。
お礼  あさこ  - 05/10/7(金) 11:10 -

引用なし
パスワード
   ありがとうございました!!
早速試してみます。
助かりました。

【29554】Re:日にちを数えたい。
お礼  あさこ  - 05/10/7(金) 13:28 -

引用なし
パスワード
   色々方法があるんですね。
これからもよろしくお願いいたします。

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