AIと戦って、あなたの人生のリスク診断 >>

並び替えるマクロを作りたいと思っています。
ある一定の法則で並んでいるものを並び替えるので、
コピー&貼り付けマクロでは長くなってしまうので
変数を使用したいと思っているのですがうまくいきません。
なにか良い方法はないでしょうか。

C6から始まる連続データを、E10から2行ずつあけて貼り付けをしたいです。
C列のデータは400行くらいまで続き、
E列の空けた部分(E11,E12)にもC列のほかの部分から貼り付けしたりする予定なので
列の挿入や削除はできるだけ使用したくありません。

Sub test()
Dim I As Long, J As Long,
J = 11
For I = 7 To J Step 3
Cells(I, 3).Copy Cells(I + 3, 5)
Next I
End Sub

上記作成してみたものの、E列が11行目になると終わってしまい、どう手直ししたらいいのかわかりません。
本来であればC列が11行目になったらコピー・貼り付けを終了したいです。

あ行の貼り付けはこのマクロ、
さ行の貼り付けはこのマクロとして複数組んでいく予定です。
詳しい方、教えてください。
よろしくお願いいたします。

「エクセル VBA 指定の範囲内をコピー 」の質問画像

質問者からの補足コメント

  • 早速ありがとうございます!
    質問1)回答
    C7が正しいです。訂正ありがとうございます。

    質問2)回答
    B列およびD列は、項目名
    C列およびE列は、項目に対する値
    となっています。
    よってB列・D列はコピーしません。
    C列のどの部分がE列にコピーできているかわからなかったので、
    B列・D列に項目名を入れているだけです。

    マクロの全体像としては、C列にテキストを読み込み、並べ替え、E列をテキストで保存する予定です。
    読み込み・保存はできたのですが、並べ替えに苦戦しています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/07/12 13:29

A 回答 (2件)

以下のマクロを作成してください。


Option Explicit
Public Sub あ行コピー()
Dim row As Long
Dim row2 As Long
row2 = 10
For row = 7 To 11
Cells(row2, "E").Value = Cells(row, "C").Value
row2 = row2 + 3
Next
End Sub
    • good
    • 0

補足要求です。


質問1)
>C6から始まる連続データを、E10から2行ずつあけて貼り付けをしたいです。
C7から始まる・・・が正しいですね。

質問2)
コピーするのはC列をE列にコピーだけですか。
図ではB列をD列にコピーしたいように見えます。(マクロではB列をD列にはコピーしていない)
B列をD列にコピーするのでしょうか。それともしないのでしょうか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qエクセルのマクロや関数について、ランダムに抽出する方法を探しています

エクセルのマクロや関数について、ランダムに抽出する方法を探しています。

例えばシート1のA列には
1:かっこいい
2:レザー
3:男性用
4:カラー豊富
5:手帳型
6:シンプル
7:~
と言ったよう文字列があり

同じシート1のB列には
1:かわいい
2:花柄
3:カラー豊富
4:レザー
5:手帳型
6:クロコダイル調
7:~

といったような文字が各セルに入力されているとします。
それぞれの列の1行目はテーマのようになっていて
これをシート2で 「かっこいい」を選択してマクロボタンを押したり関数などで
シート1の文字列からランダムで「かっこいい」の列のワードを3つとか4つピックアップして
シート2でかっこいいを選択した横のセルなどに表示させたいのです。

とても分かりにくくて申し訳無いのですが、
テーマに沿ったキーワードが大量にあり、
別シートにてテーマを選択するとそのテーマに沿ったキーワードが複数ピックアップされるような仕組みを模索しています。


もしお分かりになる方、なにかヒント的なものでも思いついた方がいればお教えいただければと思います。何卒よろしくお願いいたします。

エクセルのマクロや関数について、ランダムに抽出する方法を探しています。

例えばシート1のA列には
1:かっこいい
2:レザー
3:男性用
4:カラー豊富
5:手帳型
6:シンプル
7:~
と言ったよう文字列があり

同じシート1のB列には
1:かわいい
2:花柄
3:カラー豊富
4:レザー
5:手帳型
6:クロコダイル調
7:~

といったような文字が各セルに入力されているとします。
それぞれの列の1行目はテーマのようになっていて
これをシート2で 「かっこいい」を選択してマクロボタンを...続きを読む

Aベストアンサー

> 各列にどんどん無限に足されていくので
Excelの列数自体が有限ですから 無限に増えることはありません。
あまり条件を無駄に広げるのは良くないと思います。

Sub Macro1()
Dim xKey As String, i As Long, tf As Boolean
Dim xRng As Range, yRng As Range, y As Range
Dim lr As Long, lc As Long, ac As Long
Dim xStr As String
Const xCnt As Integer = 3 '抽出数

With ThisWorkbook.Worksheets("Sheet2")
xKey = .Range("A1").Value
Set yRng = .Range("B1").Resize(, xCnt)
End With

With ThisWorkbook.Worksheets("Sheet1")
lc = .Cells(1, .Columns.Count).End(xlToLeft).Column
tf = False
For i = 1 To lc
If .Cells(1, i).Value = xKey Then
tf = True
ac = i
Exit For
End If
Next i
If tf = False Then
MsgBox "該当するキーワードがありません。", vbCritical
Exit Sub
End If
lr = .Cells(.Rows.Count, ac).End(xlUp).Row
If lr - 1 <= xCnt Then
MsgBox "候補が規定数未満です", vbCritical
Exit Sub
End If
Set xRng = .Range(.Cells(2, ac), .Cells(lr, ac))
End With

For Each y In yRng
Do
y = xRng(WorksheetFunction.RandBetween(1, lr))
Loop Until WorksheetFunction.CountIf(yRng, y) = 1
Next y
Set xRng = Nothing: Set yRng = Nothing
End Sub

> 各列にどんどん無限に足されていくので
Excelの列数自体が有限ですから 無限に増えることはありません。
あまり条件を無駄に広げるのは良くないと思います。

Sub Macro1()
Dim xKey As String, i As Long, tf As Boolean
Dim xRng As Range, yRng As Range, y As Range
Dim lr As Long, lc As Long, ac As Long
Dim xStr As String
Const xCnt As Integer = 3 '抽出数

With ThisWorkbook.Worksheets("Sheet2")
xKey = .Range("A1").Value
Set yRng = .Range("B1").Resize(, xCnt)
End W...続きを読む

QExcelのセルの書式設定で質問です。

いつもExcelで悩んだ時にお世話になっています。
今回はセルの書式設定で助けていただきたいです。
前回ご教授いただき、1商品の価格に対して60万行あるデータベースから該当するJANコードを抜きだし一つのセルに改行して納めることができました。
それで作成されたものが添付画像のようなもので、セル内で改行して価格と13桁のJANコード(1価格に1~20くらい)があります。
このようなセルが何千とあります。
すると桁区切りに設定していた価格の,がなくなりました。
設定し直しても変わりません。
ググってユーザー定義から Ctrl+J でセル内の各行に定義を設定するという方法を知りました。
手探りで1行目の価格に#,##を、残りのJANコード行に標準/Gを設定してみましたが出来ません。
試しにJANコード部を#############にしてみましたが桁区切り点は付きません。
今は一つ一つクリックして手動で付けています。
どのようなユーザー定義を設定すれば可能でしょうか?
またJANコード数は価格(商品)によって違います。
最大数のユーザー定義を設定して貼り付ければすべてのセルに設定できるでしょうか?
例えば20行分の書式設定をしたものを1行しかコードがないセルに貼り付けても問題ないでしょうか?
ご教授お願いします。

いつもExcelで悩んだ時にお世話になっています。
今回はセルの書式設定で助けていただきたいです。
前回ご教授いただき、1商品の価格に対して60万行あるデータベースから該当するJANコードを抜きだし一つのセルに改行して納めることができました。
それで作成されたものが添付画像のようなもので、セル内で改行して価格と13桁のJANコード(1価格に1~20くらい)があります。
このようなセルが何千とあります。
すると桁区切りに設定していた価格の,がなくなりました。
設定し直しても変わりません。
ググっ...続きを読む

Aベストアンサー

前回の質問を見ていないので,どの様にして1つのセルに改行して数値(属性としては文字)を入れたか分かりませんが,おそらく書式設定ではなく,データを入れる部分を直さないといけないと思います.多分,
=A1&CHAR(10)&A2
みたいな関数で折り返し表示しているのだと思いますが,これを以下の関数にするとカンマが付きます.
=TEXT(A1,"#,###")&CHAR(10)&TEXT(A2,"#,###")

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、
Sheet1
<A列> <B列> <C列> <D列>
7/1 A店 りんご 100円
7/1 C店 みかん 100円
7/2 A店 ぶどう 200円
7/2 B店 すいか 300円
7/3 C店 みかん 150円
:
:
このような表があって、そのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

Sheet2
A店             B店            C店
7/1 りんご 100円     7/2 すいか 300円    7/1 みかん 100円
7/2 ぶどう 200円                   7/3 みかん 150円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

一番簡単なのはA列の左側にIDようの列を挿入し、
A1=C1&"-"&COUNTIF(C$1:C1,C1)
(Aは新しく挿入した列で、Cは元々のBつまり店名の入っている列です)
これをデータの数だけ下にコピーします。
「店名-その行までにその店名が出てきた回数」という表示になります。

VLOOKUPで抽出したいので左端に入れましたが、どうしても左端が無理であるなら、
E列以降でもかまわないです。
その場合VLOOKUPではなく、MATCHによって一致する行を検索し、
その行番号を用いてINDIRECTで該当するセルのデータを抽出することになり、
式の手間は増えます。

仮にAA1に「A店」とし、2行目以降に該当データを表示させます。
AA2=IF(COUNTIF(C:C,$AA$1)<ROW()-1,"",VLOOKUP($AA$1&"-"&ROW()-1,$A:$E,COLUMN()-COLUMN($AA1)+2,FALSE))
これをAD列まで&下に必要なだけコピーしてください。
AB列には店名(当然A店ばかりのはずです)も表示されます。
表示上消したければ列を非表示としてください。

非表示は不可、日付の右のセルは品物が表示されていなければならない。というのでしたら、
COLUMN()-COLUMN($AA1)+2の部分を修正してください。
COLUMNというのは列番号を取得する関数で、右に1つずれたら抽出するデータの位置も1つずれる。という計算式にしています。
個別にAB、AC列は+2を+3にする。といった対応が必要です。

一番簡単なのはA列の左側にIDようの列を挿入し、
A1=C1&"-"&COUNTIF(C$1:C1,C1)
(Aは新しく挿入した列で、Cは元々のBつまり店名の入っている列です)
これをデータの数だけ下にコピーします。
「店名-その行までにその店名が出てきた回数」という表示になります。

VLOOKUPで抽出したいので左端に入れましたが、どうしても左端が無理であるなら、
E列以降でもかまわないです。
その場合VLOOKUPではなく、MATCHによって一致する行を検索し、
その行番号を用いてINDIRECTで該当するセルのデータを抽出することにな...続きを読む

QExcel マクロについて!! 添付写真のように、各セルに文字がありますが、 (P〇〇〇)というとこ

Excel マクロについて!!





添付写真のように、各セルに文字がありますが、
(P〇〇〇)というところだけ赤色にしたいのですが、どーすれば良いでしょうか!

詳しい方よろしくお願い致します!!

Aベストアンサー

こんにちは。
この質問は、回答者のTさんの十八番ですが、私も考えてみました、というか、私は、考えすぎてしまいます。

>(P〇〇〇)というところだけ赤色にしたいのですが、どーすれば良いでしょうか!
以下のマクロは、(P〇〇〇)では、赤になりません。◯◯の所に数字が入っていないと赤になりません。画像をみると、そのように思えたからです。

もし違うようでしたら、"*(P#*)*"  は、"*(P*)*" にしてください。

'//
Sub CircleRed()
 Dim c As Range
 Dim firstAddress As String
 Dim s As Long, l As Long
 With ActiveSheet.UsedRange
  Set c = .Find("*(P*", , xlValues, xlWhole, , False, False)
  If Not c Is Nothing Then
   firstAddress = c.Address
   Do
    If StrConv(c.Value, vbNarrow + vbUpperCase) Like "*(P#*)*" Then
     s = InStr(1, c.Value, "(", vbTextCompare)
     l = InStr(1, c.Value, ")", vbTextCompare) - s + 1
     If l < 1 Then l = 2
     c.Characters(s, l).Font.ColorIndex = 3
    End If
    Set c = .FindNext(c)
   Loop While Not c Is Nothing And c.Address <> firstAddress
  End If
  End With
 End Sub

こんにちは。
この質問は、回答者のTさんの十八番ですが、私も考えてみました、というか、私は、考えすぎてしまいます。

>(P〇〇〇)というところだけ赤色にしたいのですが、どーすれば良いでしょうか!
以下のマクロは、(P〇〇〇)では、赤になりません。◯◯の所に数字が入っていないと赤になりません。画像をみると、そのように思えたからです。

もし違うようでしたら、"*(P#*)*"  は、"*(P*)*" にしてください。

'//
Sub CircleRed()
 Dim c As Range
 Dim firstAddress As String
 Dim s As Long, l As Lo...続きを読む

Qvba 自動番号振り

A列に会社の番号B列に会社名。
C列の該当する会社の行に1を入力します(複数あり)
入力と同時にD列に番号を表示。

例1)
1行名はタイトル行
A2=1 B2 〇〇 C2="" D2=""
A3=5 B3 ××  C3=1 D3=002-5-2
A4=5 B4 ×× C4=1 D4=002-5-2

※D3,D4の番号について→002は固定です。5は会社の番号のA列から。2は行カウントの数字ですが、一番上にある行カウントを以下の1が入力された行に自動表示。

次に、例1)で入力したC3とC4の1は削除して、次にC2、C5、C6に1を入力します。
この時に、例1)で表示されたD列の番号はそのまま表示されてほしいです。

A2=1 B2 〇〇 C2=1 D2=002-1-1
A3=5 B3 ××  C3="" D3=002-5-2
A4=5 B4 ×× C4="" D4=002-5-2
A5=1 B5 〇〇 C5=1 D2=002-1-1
A6=1 B6 〇〇 C6=1 D3=002-1-1
A7=5 B7 ×× C7="" D4=""


複雑なのですが、vbaで上記の内容を実現することは可能でしょうか。
可能でしたら教えてくださいませ。
宜しくお願いいたします。

A列に会社の番号B列に会社名。
C列の該当する会社の行に1を入力します(複数あり)
入力と同時にD列に番号を表示。

例1)
1行名はタイトル行
A2=1 B2 〇〇 C2="" D2=""
A3=5 B3 ××  C3=1 D3=002-5-2
A4=5 B4 ×× C4=1 D4=002-5-2

※D3,D4の番号について→002は固定です。5は会社の番号のA列から。2は行カウントの数字ですが、一番上にある行カウントを以下の1が入力された行に自動表示。

次に、例1)で入力したC3とC4の1は削除して、次にC2、C5、C6に1を入力します。
この時に...続きを読む

Aベストアンサー

補足有難うございます.

内容を読むとマクロは少なくとも2つ用意した方が良さそうですね.
①Dのセルに出力するマクロ
②Cのセルを判定するマクロ

考え方から説明しますと
・①はCのセルに値が入力された際に実行する.
・入力されたセルの行の位置を引数に入れる.
(例えばC3セルに入力したなら引数は3,C5セルに入力したなら引数は5)
・上記引数とCellsを利用してD列に値を出力する.

・②はEのセルにが入力された際に実行する.
・入力されたセルの行の位置を引数に入れる.
・上記引数とCellsを利用してCのセルの値を消す.

次に確認ですが,行カウントについて同じグループというのは例えば質問文で考えるとA2,A5,A6は1で,A3,Aは5で,それぞれ同じグループという意味で良いですか.
上記の内容が正しいならこのシートでは上から順に新規で入力された値に対して順々に数値を振り分けているという事になります.
すなわち
・会社番号が1→行カウントで1
・会社番号が5→行カウントで2
例えばA8に会社番号が6というのが入力された場合には行カウントは3になりますか?

ここでの確認の意図は行カウントが上記内容で決定しているとするなら1つ作業列もしくは作業用シートを用意した方が良いと考えるためです.
この作業というのは先ずA列の値で重複する値を削除したものをコピーし,上から1,2,3と番号振り(行カウントの値を決める)を実行するというものです.

具体的には作業シートをSheet2に置くなら,A列の範囲で重複データを削除したものをシート2のA列にコピーすれば
Sheet2のA1が1,A2が5になります.
Dのセルの行カウントの値を出力する時はSheet1のAのセル値を検索値にSheet2のAのセル値と合致するセルの行番号として出力すれば良いという事になります.
(つまり会社番号と行カウントを整理するマクロが別に必要)

まだマクロを組んでテストをしていないので,実際のマクロの記述は回答できていませんが,ご参考までに

あともう一つ確認ですが,質問者さんの立場でこのシートで入力するのはA~C列とE列ですよね?
もしC列も自動化する場合にはE列に1が入力されているかどうかでC列の1の入力/削除も可能です.

補足有難うございます.

内容を読むとマクロは少なくとも2つ用意した方が良さそうですね.
①Dのセルに出力するマクロ
②Cのセルを判定するマクロ

考え方から説明しますと
・①はCのセルに値が入力された際に実行する.
・入力されたセルの行の位置を引数に入れる.
(例えばC3セルに入力したなら引数は3,C5セルに入力したなら引数は5)
・上記引数とCellsを利用してD列に値を出力する.

・②はEのセルにが入力された際に実行する.
・入力されたセルの行の位置を引数に入れる.
・上記引数とCellsを利用してCのセ...続きを読む

Q本日を基準に一定期間経過した日が分かるようにしたい

本日を基準に、D列の日付に対して、
K列に「3ヶ月前」「6ヶ月前」「期限切れ(1年経過)」の
コメントが入るようにしたいと思っています。

「3か月前」だけなら、IF関数で何とかできたんですが、
3つにしようとするとうまくいきません。

どのような式を入れたらいいのか教えていただけると助かります。
よろしくお願いいたします!

Aベストアンサー

[No.3][No.5]ですが、大失敗でした。検証を怠っていて、申し訳ありませんでした。m(_._)m
恐れ入りますが、下記をお試しください。
L3: =DATEDIF(D3,TODAY(),"m")
K3: =IF(D3="","",IF(L3>12,"期限切れ(1年経過)",IF(L3>=6,"6ヵ月前",IF(L3>=3,"3ヵ月前",""))))
範囲 K3:L3 を下方にオートフィル

Qユーザーフォーム、コンボボックスで重複せず選択リストを表示させるには

エクセル2003と2007VBAで使用します。
ユーザーフォーム、添付画像項目「氏名」をコンボボックスで重複せず選択リストを表示させるにはどのように記述したら良いでしょうか? 宜しく御願いします。

Aベストアンサー

こんばんは。

VBAのコードを求めていらっしゃるのなら、回答者側としては、
ComboBox のList に、どこのシートからどのように重複を許してImport するコードを見せてほしいと言っているわけですね。最近、コードは見せられない、だから文章の説明的な質問の人が増えてきたと思うのです。画像添付でも、相手に伝えられる情報ではないです。
#3/#4さんの話も、#1/#2さんの話も熱心に正答をいただいているのに、解決に向かわないのは、残念です。

>シートにリストを予め用意しておくと膨大なリストからたくさんスクロールしてから選択するようにになってしまう為
2007のコマンドで、重複を排除する方法もありますし、両方なら関数で解く方法もあります。ComboBox に入れる以上は、千件以上のものを入れるというのは常識的にありえません。

それに、掲示板の回答は、必ずしも、コピー&ペーストで動くコードを提供してくれるとは限りません。それだけは心得ておいてください。


'//'UserForm モジュール

Private Sub UserForm_Initialize()
 ComboBox1.List = MakeUniqueList
End Sub

Function MakeUniqueList()
Dim objDic As Object 'New Scripting.Dictionary
Dim i As Long, j As Long
j = 1
Set objDic = CreateObject("Scripting.Dictionary")
With Worksheets("Sheet1")
  '2行目から
  For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
  If Not objDic.Exists(.Cells(i, 1).Value) Then
    objDic.Add .Cells(i, 1).Value, j
    j = j + 1
  End If
  Next
End With
  MakeUniqueList = objDic.keys
End Function

こんばんは。

VBAのコードを求めていらっしゃるのなら、回答者側としては、
ComboBox のList に、どこのシートからどのように重複を許してImport するコードを見せてほしいと言っているわけですね。最近、コードは見せられない、だから文章の説明的な質問の人が増えてきたと思うのです。画像添付でも、相手に伝えられる情報ではないです。
#3/#4さんの話も、#1/#2さんの話も熱心に正答をいただいているのに、解決に向かわないのは、残念です。

>シートにリストを予め用意しておくと膨大なリストからたくさんスク...続きを読む

QExcel条件付き書式での指定した日付を塗りつぶす方法について

お世話になっております。
添付画像を見本と致します。
BセルからCセルの15日前を塗りつぶし処理をしたいのですがどの様に条件付き書式を
構成すればよろしいのかご教示をいただきたい内容になります。

宜しくお願い致します。

Aベストアンサー

( ‥)ン? 「2017/7/15」前までを塗りつぶしたいという事でいいのかな?
だとして・・・
セルB4~F4までを範囲してしておき、条件付き書式より「新しいルール」から
「数式を使用して・・・」で、入力欄に 「=B3<$E$3」の式を入れ、
書式より塗りつぶしの色を設定→「OK」→「OK」にすると希望通りに。

Qエクセルで三つの条件での参照する方法。 お世話様です。 コード 項目 7月 8月 9月 10月 11

エクセルで三つの条件での参照する方法。
お世話様です。

コード 項目 7月 8月 9月 10月 11月 12月
1234 野菜 8 11
9876 肉類 5 4
小計 5 8 11 4
2345 魚類 12 8
3456 麺類 1 6
小計 1 6
合計

このようなデータがあります。
コードは1000くらいあります。
小計も100くらいあります。

別シートにこれよりも項目が多い表があります。
この表に上記データを反映させたいです。

作業列を作りコードと項目を&で合体させ
ます。
それを検索値とし、別シートの7月の列にvlookup関数にします。
コードの列をフィルタ掛けし小計、合計を非表示にします。
貼り付け。

これを月別に貼り付けしようと思います。
他に効率良い方法ありますか?
言葉足らずな点は補足します。
よろしくお願いいたします。

エクセルで三つの条件での参照する方法。
お世話様です。

コード 項目 7月 8月 9月 10月 11月 12月
1234 野菜 8 11
9876 肉類 5 4
小計 5 8 11 4
2345 魚類 12 8
3456 麺類 1 6
小計 1 6
合計

このようなデータがあります。
コードは1000くらいあります。
小計も100くらいあります。

別シートにこれよりも項目が多い表があります。
この表...続きを読む

Aベストアンサー

素朴な確認をば。
小計行の数値 5、8、11、4 はどのセルとどのセルとの小計になっているの?
「あれは、単に書いたまでで、実はデタラメ!」なんて言わないでネ。回答者は真剣なので。

QExcel関数 or VBA セルにある数字分、別シートにデータを作成する

・シート1のA1に任意の数字(例えば20)を入力
・シート2のB列(B1~B20)に○○1、○○2、○○3・・・・○○20というように、シート1A1の数字分のデータを作成
※シート1のA1の数字が変われば(例えば5)、シート2のB列(B1~B5)に○○1、○○2、○○3・・・・○○5となるコードを教えて頂けないでしょうか?

何度トライしてもうまくいきません。。。よろしくお願い致します。

Aベストアンサー

こんにちは!

関数での一例です。
Sheet2のB1セルの表示形式をユーザー定義から 000 としておき
=IF(Sheet1!A$1<ROW(),"",ROW())
という数式を入れフィルハンドルで下へコピーしてみてください。m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング