[[20200824171351]] 『最終行から左方向のデータのスパークライン』(イエモン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『最終行から左方向のデータのスパークライン』(イエモン)

Dim a As Long, b As Long

Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft).Offset(, 1).Value = Sheets("Sheet1").Range("AZ14").Value

a = Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft)
b = Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft, -1)
Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft).SparklineGroups.Add _
Type:=xlSparkLine, SourceData:="a:b"

としているのですがスパークラインがひけません。
最終行にどんどん追加されいままでの結果をスパークラインで表記したいです。
前回のスパークラインの結果は消したいです。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 最終行? 最終列じゃなくて?
    Sub a()
        Dim r As Range
        Set r = Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft).Offset(, 1)
        r.Offset(, -1).SparklineGroups.Clear
        r.Value = Sheets("Sheet1").Range("AZ14").Value
        r.SparklineGroups.Add _
            Type:=xlSparkLine, _
            SourceData:=r.Offset(, -1).Resize(, 2).Address
    End Sub

(稲葉) 2020/08/24(月) 18:50


ありがとうございます。行じゃなくて列でした。
変数はRangeで良かったんですね。
(イエモン) 2020/08/24(月) 20:33

 んにゃ、間違ってたのは
 >SourceData:="a:b"
 この部分
 これだと変数ではなく、ただのa:bという文字列
 それに、aとbの変数もlong型で宣言されてるから、どちらにしろ
 望んだ結果にはならなかったと思います

(稲葉) 2020/08/24(月) 21:45


そうなんですね。
a:bと" "を外してもダメでした。何か色々やってたんですが行き詰まってこちらで質問させていただきました。

私が書いたものでは、どこを直せば良かったですか?
(イエモン) 2020/08/24(月) 21:58


 無理やりaとbをlong型で生かすなら、
 a = Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft).column
 b = Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft, -1).column
 columnプロパティで列番号を取得して(イエモンさんの場合、セルの値をいれてただけ)

 SourceData:=Range(cells(3, a) , cells(3, b)).address
 とすればできますが、可読性が低いかもしれません。
 SourceDataは文字列で指定する必要があるので、結局rangeオブジェクトからaddressプロパティで
 文字列を指定する方法が比較的わかりやすいと思います。

(稲葉) 2020/08/24(月) 22:28


そうなんですね。
勉強になります。ありがとうございました。
(イエモン) 2020/08/24(月) 22:31

すみません。
昨日はスマホからの回答でパソコンを開かずご指示されたコードで理解したのですが、
私の質問が悪かったのですが、先程パソコンでやると最終列から左方向ですとスパークラインは表示されませんでした。
スパークラインの範囲はC3から右方向(最終列まで)でどんどんデータが最終列に追加され、最終列+1列にスパークライン。データが追加されたら前回の最終列+1のスパークラインは削除して新たに最終列+1にスパークラインを引きたいです。

手間暇かけて作っていただいたのに、すみません。

(イエモン) 2020/08/25(火) 07:33


 こちらでテストしてあるのですが・・・
 ご提示いただいた
 >Sheets("Sheet5").Cells(3, Columns.Count).End(xlToLeft).SparklineGroups.Add
 の場合、下図D3に描写するようになっています。
 その右隣に表示させたいということですか?
    |[A]|[B]|[C]|[D]|[E]
 [3]|100|200|300|400|   
 [4]|   |   |   |↑ |↑ 
 [5]|   |   |   |D?|E?

 ちょっと自分でやってみません?
 offsetの値を変更するだけでいいんですもん。
(稲葉) 2020/08/25(火) 08:01

すみません。数字を変えていったらできました。ありがとうございます。

今回は行でしたが、100位ある行のものを同じようにしたいんですがどうすればいいでしょうか?

SourceDataで記入する際、コンマで区切るのかカンマで区切るのでしょうか?
ヒントだけいただきたく思います。
(イエモン) 2020/08/25(火) 17:33


 「同じように」の意味が分かりません。
 データを転記するのはAZ14で、次はどの値ですか?
 図示してもらえるとありがたいです。
    |[A]|[B]|[C]|[D]|[E]|[F]|[G]            
 [3]| 40| 20| 50| 80|/ |   |シート1のAZ14  
 [4]| 30| 30|─ |   |   |   |シート1のAZ15? 規則正しい?
 [5]| 10| 50| 20|\ |   |   |               
 [6]| 80| 20| 10| 10| 10|─ |               
         ↑列数が行によってまちまち            
(稲葉) 2020/08/25(火) 17:58

すみません。
 |[A]|[B]|[C]|[D]|[E]|[F]|[G]            
 [3]| 40| 20|シート1のAZ14  
 [4]| 30| 30|シート1のAZ15 規則正しいです。
 [5]| 10| 50|シート1のAZ16
 [6]| 80| 20| シート1のAZ17
.
.
.
列数は行数と同じで100行あります。
よろしくお願いします。
(イエモン) 2020/08/25(火) 19:04

 ヒントじゃたぶん無理だったんで、コメントいれたので見てみてください
    Sub a()
        Dim i As Long '転記元のデータ行番号
        Dim n As Long '描写先の行番号
        Dim ws1 As Worksheet '転記元のシート
        Dim ws2 As Worksheet '描写先のシート
        Dim r As Range
        Set ws1 = Sheets("Sheet1")
        Set ws2 = Sheets("Sheet5")
        n = 3
        For i = 14 To ws1.Cells(Rows.Count, "AZ").End(xlUp).Row
            With ws2.Cells(i, Columns.Count).End(xlToLeft)
                .Offset(, 1).SparklineGroups.Clear
                .Offset(, 1).Value = ws1.Cells(i, "AZ").Value
                .Offset(, 2).SparklineGroups.Add _
                    Type:=xlSparkLine, _
                    SourceData:=.Resize(, 2).Address
            End With
        Next i
    End Sub
(稲葉) 2020/08/25(火) 19:16

 すみません、間違えました
 n使うつもりが、iで描写しちゃった・・・
    Sub a()
        Dim i As Long '転記元のデータ行番号
        Dim n As Long '描写先の行番号
        Dim ws1 As Worksheet '転記元のシート
        Dim ws2 As Worksheet '描写先のシート
        Dim r As Range
        Set ws1 = Sheets("Sheet1")
        Set ws2 = Sheets("Sheet5")
        n = 3
        For i = 14 To ws1.Cells(Rows.Count, "AZ").End(xlUp).Row
            With ws2.Cells(n, Columns.Count).End(xlToLeft)
                .Offset(, 1).SparklineGroups.Clear
                .Offset(, 1).Value = ws1.Cells(i, "AZ").Value
                .Offset(, 2).SparklineGroups.Add _
                    Type:=xlSparkLine, _
                    SourceData:=.Resize(, 2).Address
            End With
            n = n + 1
        Next i
    End Sub
(稲葉) 2020/08/25(火) 19:23

迅速なコメントありがとうございます。
まだ試してないんですが、これから別件の仕事なので改めてコメントさせていただきます。
 
(イエモン) 2020/08/25(火) 19:48

 ループしなくてもできました。
 すみません
    Sub test2()
        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        Dim r As Range
        Set ws1 = Sheets("Sheet1")
        Set ws2 = Sheets("Sheet5")
        Set r = ws1.Range("AZ14", ws1.Cells(Rows.Count, "AZ").End(xlUp))
        With ws2.Cells(3, Columns.Count).End(xlToLeft).Resize(r.Rows.Count)
            .Offset(, 1).SparklineGroups.Clear
            .Offset(, 1).Value = r.Value
            .Offset(, 2).SparklineGroups.Add _
                        Type:=xlSparkLine, _
                        SourceData:=.Resize(, 2).Address
        End With
    End Sub

(稲葉) 2020/08/26(水) 08:10


何度もご提示ありがとうございます。
やりたい事ができました。
大変にありがとうございました。
(イエモン) 2020/08/26(水) 19:16

ご提示して頂いたもの活用させていただいてます。また質問させてください。

SourceData:=.Resize(, 2).Addressはws2.Cells(3, Columns.Count).End(xlToLeft).Resize(r.Rows.Count)そのものを2列?移動で合っていますか?
またSourceData:=.Resize(, 2).Addressを任意のアドレスの表記は可能でしょうか?
資料作成中にスパークラインを表記する範囲が変えたい事が追加されまして。

シート5です。

  |[A]|[B]|[C]|[D]|[E]|[F]|[G]            
 [3]| 40| 20| 50| 80|     |   |
 [4]| 30| 30|    |   |   |   |
 [5]| 10| 50| 20|   |   |   |               
 [6]| 80| 20| 10| 10| 10|   |  
こうだとしたら、最終列とか、C5にA5とB5のデータとか。です。
何度もすみません。よろしくお願いします。
(イエモン) 2020/08/30(日) 17:42

 なら
 (稲葉) 2020/08/25(火) 19:23
 の投稿のコード使ってください
 行ごとに最終列判定してます
 範囲は適当にいじってみてください
(稲葉) 2020/08/30(日) 21:02

わかりました。
スパークラインの範囲ができないので地道にいきます。
ありがとうございました。
(イエモン) 2020/08/31(月) 16:06

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.