[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
(もこな2) 2018/12/02(日) 14:00
>と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
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
また、「CSVからspiritで読み込み」とのことですが、提示のコードにそのような箇所は見られません。もしかして、メモリ上に読み込んだCSVファイルから、Split関数を使用して2次元配列を作成しています。
ではないですか?
それでも、提示のコードにはそのような記述は無いですが・・・
>(実際にはBセルに値はありません。csvデータに格納してます)
もちろん個人情報につながるようなことは秘匿すべきですけど、あまり仮定のもので話をしても遠回りになりますから、実際にどのようなものを作っていて、どこで詰まっているのか提示したほうがよいのではないでしょうか?
(もこな2) 2018/12/02(日) 17:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.