前回 質問させていただいた ものの追加質問になるんですが
このようなCSVデータがありまして
A列の重複したデータをひとつにまとめて 1から順に並び替えて
行ごとに
別のワークブックのテンプレートに表示させるところまでは前回の質問で
解決したんですが
その際、CSVデータの中の
C列は最も小さい値を選択して 0~1は 小、1~3 は 大
というように別の文字変換させて表示させる。
D列は最も大きい値を表示させる というようなマクロが組みたいんですが
どのようなマクロを組めばいいのでしょうか?
No.4ベストアンサー
- 回答日時:
こんばんは!
https://oshiete.goo.ne.jp/qa/10124231.html
↑のサイトの関連質問ですね。
>C列は最も小さい値を選択して 0~1は 小、1~3 は 大
ピッタリ「1」の場合はどちらになるのでしょうか?
とりあえず、「1以下」が「小」、「1より大きい場合」が「大」としてみました。
尚、前回同様でSheet1にはすでに画像のような配置でデータがあり、Sheet2の6行目以降に表示するとします。
Sub Sample4()
Dim myDic As Object
Dim myKey, myItem, myR, myAry
Dim i As Long, lastRow As Long, myN As String, wS As Worksheet
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 5 Then
Range(wS.Cells(6, "A"), wS.Cells(lastRow, "Q")).ClearContents
End If
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(1, "A"), .Cells(lastRow, "E"))
For i = 1 To UBound(myR, 1)
myN = myR(i, 1)
If Not myDic.exists(myN) Then
myDic.Add myN, myR(i, 2) & "_" & myR(i, 3) & "_" & myR(i, 4) & "_" & myR(i, 5)
Else
myAry = Split(myDic(myN), "_")
myDic(myN) = myAry(0) & "_" & WorksheetFunction.Min(myR(i, 3), myAry(1)) & "_" & _
WorksheetFunction.Max(myR(i, 4), myAry(2)) & "_" & myAry(3)
End If
Next i
End With
myKey = myDic.keys
myItem = myDic.items
myR = Range(wS.Cells(6, "A"), wS.Cells(UBound(myKey) + 6, "Q"))
For i = 0 To UBound(myKey)
myAry = Split(myItem(i), "_")
myR(i + 1, 1) = myKey(i)
myR(i + 1, 4) = myAry(0)
If myAry(1) <= 1 Then '//★等号は不要か?//
myR(i + 1, 10) = "小"
Else
myR(i + 1, 10) = "大"
End If
myR(i + 1, 14) = myAry(2)
myR(i + 1, 17) = myAry(3)
Next i
Range(wS.Cells(6, "A"), wS.Cells(UBound(myKey) + 6, "Q")) = myR
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End Sub
※ 「1未満」が「小」の場合はコード内の「★」の行の等号を消してください。
尚、前回最後に並び替えのコードを記載していましたが、
Sheet2の方はセル結合があるのですかね?
セル結合があるとソートできないはずなので、
今回は並び替えは考慮していません。m(_ _)m
回答ありがとうございます
私が考えてたととおりにうまくできました 完璧です
tom04さんの言ったように、私も思って セル結合はずしました
並び替えもそ後ろにくっつけたら うまくいきました
ほんとに助かりました
No.5
- 回答日時:
No.4です。
書き忘れたコトが・・・
画像のC列はおそらく文字列になっていると思います。
その場合、大小の区別が難しいのでC列のセルの表示形式をユーザー定義から
0.0"mm"
としておき、小数点以下第一位まで表示させるようにしてください。
※ 入力は 1 とか 2 のように数値のみの入力にします。m(_ _)m
No.3
- 回答日時:
#2です。
提示したマクロは、#1にも書きましたが、単に、セルに関数式を設定しているだけのものです。
(右辺が関数式にあたります。関数式そのものは文字列として設定します。)
それなので、別シートを参照したい場合は、通常の関数で別シートを参照する時と同じように式の内容を修正すれば可能です。
例えば「C:C」となっている部分を「シート名!C:C」のように修正すれば良いです。
とは言え、
>別ワークブックの別シートの中の例えば 6行目のJ列から
>順に結果を表示したいとすると
複数セルに表示するという意味でしょうか?
私の理解では「C列は最も小さい値を選択して0~1は小、1~3は大」なので、結果はひとつしかないはずですから、複数セルに記述しても同じ値が並ぶだけだと思いますが・・・
どこかで、勘違いしているのかなぁ??
No.2
- 回答日時:
こんんちは
処理の内容が不明なのでなんとも言えませんが・・・
C列の単位表示は書式で行っていて、実際の値は数値と仮定します。
マクロで計算してもできますが、関数式を設定してしまうのが簡単かと思います。
C列の結果を表示をしたいセルに対して
対象セル.FormulaLocal = "=IF(MIN(C:C)<0,""他"",IF(MIN(C:C)<1,""小"",IF(MIN(C:C)<3,""大"",""他"")))"
同様に、D列の結果を表示したいセルに対して
対象セル.FormulaLocal = "=MAX(D:D)"
を実行しておけばよろしいかと。
※ 上記の関数式は、それぞれC列、D列全体が対象になっていますので、表示したいセルがC列やD列にある場合には、そのセルを外した範囲設定にしないと、循環参照になりますのでご注意。
回答ありがとうございます
すいません 質問です
C列の結果を表示をしたいセルが
別ワークブックの別シートの中の例えば 6行目のJ列から
順に結果を表示したいとすると
それぞれ どういうマクロにかえればいいのでしょうか
No.1
- 回答日時:
必ず数字が入っている上で単位が付与されているならば、以下のようにすれば数字で処理できます。
Public Sub test()
Dim a As String
a = "0.2mm"
Dim b As Currency
b = Val(a)
MsgBox CStr(b) ' 0.2
If b >= 0 And b < 1 Then
MsgBox "小"
End If
If b >= 1 And b < 3 Then
MsgBox "大"
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) excelにおける転記マクロの書き方 2 2023/05/12 03:16
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Excel(エクセル) [Excel2016] 相関表等の自動作成 2 2022/08/01 20:34
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
結合されたセルをプルダウンの...
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
罫線の斜線を自動で引くマクロ
-
AのセルとB行を比較して、一致...
-
エクセルマクロ オートSUM(合...
-
VBAで色の付いているセルの行削除
-
【VBA】「同じ文字を含むセ...
-
電話番号の入力方式が違うデー...
-
"/"でセル内の文字を縦に分割す...
-
特定の文字がある行以外を削除...
-
Excel グラフのプロットからデ...
-
A1に入力された文字列と同じ文...
-
アクティブになっている行をマ...
-
エクセルマクロで偶数行(又は...
-
Excel:いまフォーカスがあるセ...
-
excel 小さすぎて見えないセル...
-
Excel ウインドウ枠の固定をす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
excel 小さすぎて見えないセル...
-
AのセルとB行を比較して、一致...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
excelのデータで色つき行の抽出...
-
Excel グラフのプロットからデ...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
特定の文字がある行以外を削除...
-
連続データが入った行の一番右...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセルで昨日までの日付デー...
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
おすすめ情報