• 締切済み

Excel VBA 「値が変更したら・・・」

Excel2000を使用しています。 現在A1からA1000までに |    A --------------------- 1| 111-01-000.jpg 2| 111-02-000.jpg 3| 112-01-000.jpg 4| 112-02-000.jpg 5| 112-03.000.jpg ・     ・ といったように親番-枝番-000.jpgというデータが格納されています。 枝番にランダムに01で終わる場合もあれば05で終わる場合もあります。MAX06までです。 これらを親番が同じ場合は、横に、親番が変われば行を変えて親番が同じ間は横にというように表示したいのですが、 方法はありますでしょうか。 最終的には、 _|_______B_______________________C__________________D_______ 1| 111-01-000.jpg | 111-02-000.jpg| 2| 112-01-000.jpg | 112-02-000.jpg| 112-03-000.jpg というように表示したいのです。 ご存知の方がいましたらご教示ください。 よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です表題にはVBAとありますね。 VBAでやってみました。 Sub test01() d = Range("A65536").End(xlUp).Row ' MsgBox d Range(ActiveSheet.Cells(1, "A"), ActiveSheet.Cells(d, "A")).Sort key1:=Range("A1") For i = 1 To d f = Split(Cells(i, "A"), "-") c = Val(f(1)) + 1 r = Val(Mid(f(0), 3, 1)) ' l = Cells(65536, c).End(xlUp).Row + 1 Cells(r, c) = Cells(i, "A") Next i End Sub 例データと結果 111-01-000.jpg 111-01-000.jpg 111-02-000.jpg 111-02-000.jpg 112-01-000.jpg 112-02-000.jpg 112-03.000.jpg 112-01-000.jpg 112-02-000.jpg 112-03.000.jpg ただ #2の後半の問題は易しいほうに解してます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

●本件どれで回答するのを希望してますか? エクセルの質問を回答する場合 (1)手操作、ウイザード手操作(ピボットテーブルなど) (2)関数 (3)VBA などの方法がありますが、本質問はどれを念頭においているか判らない。 (2)かもしれないが、こういう並べ替えや、抜き出しの問題は関数は不得意です。大変複雑になり全セル関数で埋まり、回答を理解するのも大変な場合が多い。関数はやはり主に計算用に作られている。 VBAならルールをそのままコード化すればよいので、わかる人にはとっつきやすい。 ●もう1つ、現れていないので判らないのが 111-01-000等が複数現れないのでしょうね。 並べなおした後に、112-XX-XXXは第2行目に現れるのか。 複数表れるなら、関数の回答にとって、非常に難しさを持ち込む。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

'概ねこんな感じ Public Sub 分類() Dim Base As Range Dim 親番 As Integer, 枝番 As Integer, 前親番 As Integer Dim index As Long, c As Long Dim a Set Base = Range("A1") index = 0: c = -1: 前親番 = -1 Application.ScreenUpdating = False Do While Base.Offset(index).Value <> "" a = Split(Base.Offset(index).Value, "-") 親番 = CInt(a(0)) 枝番 = CInt(a(1)) If 前親番 <> 親番 Then c = c + 1 前親番 = 親番 End If Base.Offset(c, 枝番).Value = Base.Offset(index).Value index = index + 1 Loop Application.ScreenUpdating = True End Sub

関連するQ&A

  • Excel VBA 値取得について

    お世話になります。 どなたかお力をお貸しください。 Excel2003 VBAでプログラムを組んでおり、エクセルのシートをデータベース代わりに利用しています。 複数のブック散乱している10万個近くのテキストボックスの値を、 「A」というブックの「シート1」のセルに格納して行きたいと思っております。 値の格納方法としては、「A」ブックの「シート1」の セルA1からA2、A3…A列最終行(6万強)まで縦の並びにデータを格納していきます。 ただし、「シート1」に格納したい値は10万個近くあるので、 A列だけでは足りなくなります。 A列の最終行まで値を格納し終えたら、自動的にB列に移動して、 セルB1からB2、B3…B列最終行(6万強)という遷移させていきたいのです。 A列のみに格納していくのであれば、理解できるのですが、 自動遷移がわかりません。 For i = 0 To 最終行(6万強) シート1.Range("A" & i) = 参照元 Next i よろしくお願いします。

  • EXCEL VBAについて

    こんばんは、VBA勉強中です。いろいろ調べていますが、以下のようなものを作るときに、どのように記述してよいか分からないのでご教授お願いします。 (やりたい事) Userformで、日付とランダムな数字を選択できるBOXを作成し、検索ボタンを押すと、A列にある名前が表示されるというものをつくりたいと思っています。 例えば、下の表でいうと、2日の158と検索すると、斉藤という名前され、3日の236を検索すると、鈴木が表示されるというものです。       A    B  C   D・・・ 1行目 高橋   1   .2.  3.・・・31  ←日付 2行目  鈴木  305  258 236 210 3行目 斉藤   215  158 214 よろしくお願いいたします。EXCEL2000を使用しています。

  • エクセルVBAもし同じ値なら!!

    エクセルVBAもし同じ値なら!! 開いているBookのFormから違うBookのSheet1のA列にDATAを入力することはできます。 例)TextBox1の値があれば次の列に入れることはできます。 悩んでいるのは (1)TextBox1と違うBookの"Sheet1”のA列が同じ値なら  MsgBox "既に登録済みです。"と表示させて  ElseでDATAを入力させたいです。 '使用行を格納 lngYcnt_K = SH1.UsedRange.Rows.Count For lng = 1 To lngYcnt_K 'TextBox1と同じ値を見つけてテキストボックスの値を入力。 If CStr(TextBox1.Text) = CStr(SH1.Cells(lng, 1)) Then MsgBox "既に登録済みです。" Else 最終行 = SH1.Range("a65536").End(xlUp).Row TextBox1.Text = SH1.Cells(lng, 1) TextBox2.Text = SH1.Cells(lng, 2) End If Next lng どのようにすれば良いのでしょうか?? 教えて下さい!

  • Excel VBAで値が重複する行を削除する

    Excel2000を使っています。 シートAに数千件のデータがあります。 シートBのE列にある文字とシートAのD列の文字が重複する場合に、シートAの重複するセルがある行を削除する(且つできれば行のデータを抜き出すVBAを作ろうと考えています。 最近VBAの初心者本をやっと理解したところで、ちんぷんかんぷんとまではいかないけど、知恵熱がでました。 仕事なので自分でなんとかすべきかと思いますが、きっかけの調べ方がまずわからない。 どなたか、解かるきっかけだけでも与えて頂けないでしょうか。とくに、別シートの値と重複する値を探す場合に何をいれるかわかればきっと道は開けると思うんですが…。 初めての質問なので、質問内容が至らなかったらもうしわけありません。

  • VBA 最終行の値を取得

    Excel2007です。 印刷用シートに、用紙を4分割して、4件分のカードを印刷できるようにしてあります。 A1, F1, A10, F10の入力セルに、それぞれデータシートのNo.を入れると、vlookupで連動されるようになっています。 No.の入力セルは、4ずつ加算されるようにVBAを書きました。 さらに、データシートの最終No.を超えた場合に、メッセージボックスを出したいのですが、うまくいきません。 例えば、データシートが200件まで入力されているとして、印刷シートのNo.に「201」を入力すると、「これ以上データがありません」というメッセージを表示させたいです。 Sub 次データ() Dim 最終行 As Long, 最終値 As Long Dim my As String 最終行 = Worksheets("データ").Range("A1048576").End(xlUp).Row 最終値 = Cells(最終行, 1) Worksheets("印刷用").Select Range("A1").Value = Range("A1") + 4 Range("F1").Value = Range("F1") + 4 Range("A10").Value = Range("A10") + 4 Range("F10").Value = Range("F10") + 4 If Range("A1") > 最終値 Or Range("F1") > 最終値 Or Range("A10") > 最終値 Or Range("F10") > 最終値 Then my = MsgBox("これ以上データがありません", vbOKOnly + vbExclamation, "注意!") End If End Sub このように書いてみましたが、これだと「次データ」を実行する度にメッセージボックスが出てしまいます。 どこを直せばいいのでしょうか。 分かりづらい文章ですみません。 なにぶん、VBAをかじりかけたばかりで、ド素人ですのでよろしくお願いします。

  • EXCEL VBAで

    EXCEL VBAで シート1のA2~G2までの列にA,B,C,D~と題名があり、それぞれの下の行には数字が並んでます。シート2のA2~G2までの列にもA,B,C,D~と題名がありますが、ランダムに並んでます。シート1のAの行を、シート2のAの行に、BにはBへという風にコピーをさせるにはどのようにすればよいでしょうか。またシート1A~Gのどれかが欠けている場合もあります。その場合はシート1にあるもののみコピーすることとします。 わかりにくいかも知れませんか、どうかよろしくお願いします。

  • 複数の画像をVBAでエクセルに貼り付ける方法

    VBA初心者です。 多数のJPG画像が指定のフォルダ内に保存してあります。 JPG画像には、img_001.jpg、img_002.jpg・・・というように連番の名前が記載されています。 EXCELファイルのA列のセルに入力されているランダムな数値に対応した画像が 同じ行のB列に表示するようにしたいと考えています。 (たとえば、A1のセルに1を入力したら、B1のセルにimg_001.jpgが表示される) このような操作を、VBAを使用して作成することはできるのでしょうか。

  • Excel VBAのプロシージャについて

    こんにちは、VBAを作成しているのですが、分からない所があるので、詳しい方からのご教授をお願いします。 A                                 AF  _______________________________________________________________________  1|        1   2    3   4   5    ・・・  31   ←日付  2|  鈴木  11   15   35   8 25  3|  斉藤   45   52   25   21   50  4|  伊藤   25   45 75   36 16   ・1行目のB1セルからAFセルまで日付が入っています。 ・2行目のA2セルからA4セルまで名前が入っており、横方向にランダムな数字が入っています。 上記の表から、日付とランダムな数字を指定し検索する事でmsgboxで氏名を返せるように作っています。(例えば3日25で検索すると、msgboxで斉藤とでるようにする)。 自分なりに作ってみたのは、まずvbaを実行すると、A1行をautofilterで日付を検索し、activecell(検索結果の日付セル)の列からランダムな数字を再度autofilterで検索するというものですが、もっと記述について他に方法があるのではないかと疑問に思っていますので、このようなプログラムを作成する場合、慣れた方ならどのように記述するのでしょうか?よろしければ教えていただければと思いますのでよろしくお願いします。 ※実際は検索boxを作成していますが、AHセルに検索したい日付、AIセルに検索したいランダムな数字を入力するものとさせて頂きます。 ※EXCEL2000を使用しています。 ※中傷するような回答は遠慮させていただきます。 よろしくお願いします。

  • エクセル 抽出した値を別々に表示させたい

    たとえば、Aという項目のとなりの列に「ああ」、「いい」とランダムに文字列があります。重複ありです。 別シートにて集計したいのですが、該当するすべての値を横1列に表示させたいのです。重複する値を別々に表示させることはできますか?

  • Excelの使い方で

    何年使ってもExcel初心者です(-_-;) 例えば、列A1からA100に0から9までの数字がランダムに入ってるとします。 その時、0が何個、1が何個、2が何個、…というように表示(カウント?)するにはどうすればいいのでしょうか?

専門家に質問してみよう