[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『入力があった行のセルのみ、別シートにコピーする方法を教えて下さい』(くま)
例えば、sheet1で
A列にグループ名(縦にセル結合しています)、 B列に名前、 C列に個数 を入力できる表があるとします。
A列、B列は、すでに固定で入力がされおり、追加入力はありません。
C列に個数が入力された行のみ、 グループ名と名前をsheet2の A列、B列にそれぞれ表示をしたいと考えています。
IFとVLOOKUPでできるかと考えたのですが、 私の知識では、希望通りには、できませんでした。
過去ログを見ても合致するのを見つけられなかったので、 どなたかご教授いただけませんでしょうか。
特にリアルタイムで、反映する必要はなく、 ボタン等を作成して、クリックした際に反映する方式でも構いません。
宜しくお願い致します。
Sheet2!A1=IF(Sheet1!C1="","",Sheet1!A1) で、縦横フィル (x-men)
x-men様、早々にご回答ありがとうございます。
確かにその方法であれば、簡単にできますね。 しかしながら、申し訳ございません。説明不足でした。
このファイルは、多数の人が使う予定ですので、 できれば、フィルタは使わずに(できるだけ操作をさせずに) 処理したいのです。
数だけ入力して、シートを変えたら、 一覧表ができていると言った感じで・・・
他に良い方法があれば、ご教授宜しくお願い致します。
(くま)
フィルタは使ってませんし、数式を予めいれておけば全部表示されますが? それとも、空白は詰めて上から表示させるという事ですか? (x-men)
こういう事ですかね?
'Sheet2オブジェクトモジュール Private Sub Worksheet_Activate() Dim v, vv(), i As Long, j As Long, c As Long v = Worksheets("Sheet1").Range("A1").CurrentRegion.Value c = Application.CountA(Worksheets("Sheet1").Columns("C")) ReDim vv(1 To c, 1 To 2) j = 1 For i = 1 To UBound(v) If v(i, 3) <> "" Then vv(j, 1) = v(i, 1): vv(j, 2) = v(i, 2) j = j + 1 End If Next i Me.Range("A1").Resize(c, 2).Value = vv End Sub
(x-men)
x-men様
そうです。やりたかった事ができました!! 本当にありがとうございます。 すごいですね。 こんなのとてもじゃないですが、私のレベルでは、 思いつきませんでした。 EXCELって、本当に奥が深いと感じました。
ただ、sheet1のA列の結合されたセルを sheet2のA列に持ってくる際に それぞれの行に同じ内容を表示するか、もしくはsheet2でも結合して表示する事は、 やっぱり難しいですよね?
(くま)
こういう事をやりたい時に結合セルがあるのはナンセンスだと思いますね。 VBAでも結合セルの処理は重くなりますし、それだけの為に色々な処理を しなければならないです。
とはいえ、サンプルコードです。
'Sheet2オブジェクトモジュール Private Sub Worksheet_Activate() Dim v, vv(), i As Long, j As Long, c As Long Dim myCol As New Collection, r As Range With Application .DisplayAlerts = False '修正 .ScreenUpdating = False '修正 End With With Worksheets("Sheet2").Columns("A:B") '追加 .ClearContents '追加 .UnMerge '追加 End With '追加 With Worksheets("Sheet1").Range("A1").CurrentRegion For Each r In .Columns("A").Cells If r.MergeCells Then Set rr = r.MergeArea myCol.Add rr st = r.Value rr.UnMerge rr.Value = st End If Next r v = .Value For Each r In myCol r.Merge Next r End With c = Application.CountA(Worksheets("Sheet1").Columns("C")) ReDim vv(1 To c, 1 To 2) j = 1 For i = 1 To UBound(v) If v(i, 3) <> "" Then vv(j, 1) = v(i, 1): vv(j, 2) = v(i, 2) j = j + 1 End If Next i Me.Range("A1").Resize(c, 2).Value = vv For i = 2 To c If vv(i - 1, 1) = vv(i, 1) Then _ Me.Range("A" & i - 1 & ":A" & i).Merge Next i With Application .DisplayAlerts = True .ScreenUpdating = True End With End Sub
(x-men) 一部修正 16:44
x-men様
本当に、本当に、ありがとうございます。 素晴らしいです。
確かにコードがこれだけ長くなっているのを見ると 結合セル、ナンセンスな感じですね。
でも入力表の方も、実はお客様に提出するフォームであったりするので、 見栄えという点も重要であり、正直、難しい所ですね。
このように解決ができて(しかも短時間で)、 本当に助かりました。 今後、色々と参考にさせていただきますね。
ありがとうございました。
(くま)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.