[[20181202100907]] 『tmpの書き出しについて。』(ヤイリ) ページの最後に飛ぶ

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

 

『tmpの書き出しについて。』(ヤイリ)

お世話になります。
現在読み込んだ
Bセルの値が

000005
000005
000006
555555
555555
555555
555555
555555
222222
123456
123456
567555
だった場合

Aセル,Bセル
1,000005
1,000005
2,000006
3,555555
3,555555
3,555555
3,555555
3,555555
4,222222
5,123456
5,123456
6,567555
とBセルの値が
変わったタイミングで
Aセルにシーケンスが増えていくのですが

Bセルの値が
例えば
データで
読み込んだ
tmpの値だとして同じように
000005
000005
000006
555555
555555
555555
555555
555555
222222
123456
123456
567555
だったとします

tmpの値をAセルで取得したように
最終行まで
1
1
2
3
3
3
3
3
4
5
5
6
書き出し取得したいので
サンプル等あれば助かるのですが・・・
お手数ですがよろしくお願いいたします。

< 使用 Excel:unknown、使用 OS:unknown >


回答ではないですが、
 Aセル,Bセル
  ↓
 A【列】、B【列】

同様に、

 Bセルの値が、例えばデータで読み込んだtmpの値だとして
  ↓
 B列の値を、Variant型の変数「tmp」に一次元配列(あるいは、二次元配列)で取得したときに

ではないですか?

また、tmpといっているので、ExcelVBAの質問だと推測され、それゆえに要らないと思ったのでしょうが、明確にしておくほうがベターだと思います。↓
< 使用 Excel:unknown、使用 OS:unknown > 

質問の方は、tmpのインデックス番号を使えばいいような気がしますけど、そもそも何を聞きたいのかよくわからず、大外れかもしれないので保留します。

(もこな2) 2018/12/02(日) 10:42


コメントありがとうございます。
質問が分かりにくく、すいません。

 >B列の値を、Variant型の変数「tmp」に一次元配列(あるいは、二次元配列)で取得したときに

上記の認識で合っていると思います。

現在
Bセルの値

Aセルに値を書き出し

Variant型の変数「tmp」の値を読み込み

resultに値を渡す感じでしょうか。

< 使用 Excel:2016、使用 OS:win10 >
(ヤイリ) 2018/12/02(日) 11:18


レス頂いて起きながらですが、残念ながら私には「Bセル」、「Aセル」、「result」が理解できないので回答できません。他の回答者さんをお待ち下さい。

(もこな2) 2018/12/02(日) 14:00


tmo(k)とtmp(k-1)を比較し
異なれば、result(k)は、result(k-1)に +1すればよいと思います。

>とBセルの値が
>変わったタイミングで
>Aセルにシーケンスが増えていくのですが

A列の式と同じ考え方でできませんか?

(マナ) 2018/12/02(日) 14:13


マナさんとかぶったかもしれませんが、そのまま。

おまけで。
もし、以下のような表のときに、B【列】の値が上の【行】と違っていたら、A【列】の値を1加算したいということであればですが

 ____A_____B_____
  1  1   000005 
  2 ※   000005 
  3      000006 
  4      555555 
  5      555555 
  6      555555 
  7      555555 
  8      555555 
  9      222222 
 10      123456 
 11      123456 
 12      567555 

【数式案】

 (1)※のところ(A2セル)に「=IF(B2=B1,A1,A1+1)」と入力
 (2)(1)をA12セルまでフィルコピー

【マクロ(VBA)案】

   Sub test1()
      Dim i As Long, c As Long

      With ActiveSheet
         For i = 2 To .Cells(.Rows.Count, "B").End(xlUp).Row
            If .Cells(i, "B").Value <> .Cells(i - 1, "B").Value Then c = c + 1

            .Cells(i, "A").Value = 1 + c
         Next i
      End With
   End Sub

 または、

   Sub test2()
      Dim MyRng As Range, c As Long

      With ActiveSheet
         For Each MyRng In .Range("B2", .Cells(.Rows.Count, "B").End(xlUp))
            If MyRng.Value <> MyRng.Offset(-1).Value Then c = c + 1

            MyRng.Offset(, -1).Value = 1 + c
         Next i
      End With
   End Sub

みたいな感じでいけるとおもいますので、配列から一度離れて考えてみるといいかもしれません。

(もこな2) 2018/12/02(日) 14:32


(マナ)さん(もこな2)さん
アドバイスありがとうございます。
A列の式と同じ考え方でいきたいのですが

    Dim buf As Variant
    Dim i As Long
    Dim j As Long
    Dim Write1 As Long
    Dim 最終行 As Long
    Dim result As Variant

    最終行 = Range("B1").End(xlDown).Row

    result = Cells(1, 1).Resize(最終行, 2).Value

    i = 1
    result(1, 1) = i

    For Write1 = 2 To 最終行
        If result(Write1, 2) <> result(Write1 - 1, 2) Then
            i = i + 1
        End If
        result(Write1, 1) = i
    Next Write1

    Cells(1, 1).Resize(最終行, 2).Value = result

End Sub

上記のように
B列の値と同じデータを(実際にはBセルに値はありません。csvデータに格納してます)
CSVからspiritで読み込み
文字列型の変数「tmp」に一次元配列(あるいは、二次元配列)で取得したとき
A列で値として書き出した結果を
resultとして書き出したいのでご質問させていただきました。
因みにcsvから読み込む際の値はstringになります。
まだうまく伝わっているかどうか分かりませんが
それでサンプルがあればと思い投稿させていただきました。

(ヤイリ) 2018/12/02(日) 14:53


こういうことですか
 Sub test()
    Dim s As String
    Dim tmp, result
    Dim k As Long, n As Long

    s = "5,5,3,3,2,0,7,7"
    tmp = Split(s, ",")

    result = tmp

    n = 1
    result(0) = n

    For k = 1 To UBound(tmp)
        If tmp(k) <> tmp(k - 1) Then n = n + 1
        result(k) = n
    Next

    MsgBox Join(result, vbLf)

 End Sub

(マナ) 2018/12/02(日) 15:00


とりあえず、↓であれば、「result」は1次元配列ではなく2次元配列ですね。
result = Cells(1, 1).Resize(最終行, 2).Value

また、「CSVからspiritで読み込み」とのことですが、提示のコードにそのような箇所は見られません。もしかして、メモリ上に読み込んだCSVファイルから、Split関数を使用して2次元配列を作成しています。
ではないですか?
それでも、提示のコードにはそのような記述は無いですが・・・

>(実際にはBセルに値はありません。csvデータに格納してます)
もちろん個人情報につながるようなことは秘匿すべきですけど、あまり仮定のもので話をしても遠回りになりますから、実際にどのようなものを作っていて、どこで詰まっているのか提示したほうがよいのではないでしょうか?
(もこな2) 2018/12/02(日) 17:20


アドバイスありがとうございます。
今回、頂いたサンプルで
なんとかなりそうです。
あとはこちらで色々考えてみますので
大変参考になりました。
今後ともよろしくお願いします。
(ヤイリ) 2018/12/03(月) 09:54

コメント返信:

[ 一覧(最新更新順) ]


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