ExcelでA列に30種類の中からランダムに商品名が(重複しています)B列~D列にその商品の売上日、伝票番号、請求額が入力されています。
やりたいことは商品名ごとに売上日、伝票番号、請求額を別の請求書フォーマットに内訳として転記したいのです。
(別シートに作成してあります)
現在はソートを利用して、あとは手作業でコピーして貼り付けをしているのですがそれを自動でできる方法はあるでしょうか。
ソートする商品名は月毎でばらばらなので簡単なマクロだとどうしてもソートする部分が手動になってしまって困っています。
ピポットだと集計してしまうので内訳すべての転記ができません。
本来ならAccess等を使用するべきだとは思うのですがExcelでなんとかできないものかと皆様のお知恵を貸して下さい。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

Sheet1のデータを(人が手で)ソートした後、マクロを実行する想定でした。


今の結果は商品名でソートされていない状態での結果のようです。下記に自動的にソートし、全商品の出力が終ればデータ並びを元に戻すようにしました。
まず、3箇所挿入します。前後の行を見て、「*** 追加 ***」の行を挿入して下さい。

=挿入1=
Public endFlg As Boolean 'データ終了フラグ
Public sortFlg As Boolean 'ソート済みフラグ *** 追加 ***


Public Sub DataTensou()

=挿入2=
End With
'
DataSort 'データソート *** 追加 ***
dataNum = Worksheets("Sheet1").UsedRange.Rows.Count - 1

=挿入3=
If cot > dataNum Then
FukkiSort '元の順に戻す *** 追加 ***
MsgBox "終了しました"

次に標準モジュールに貼り付けます。(追加)
Public Sub DataSort() 'データソート
If sortFlg = True Then Exit Sub

Application.ScreenUpdating = False
With Worksheets("Sheet1")
.Select: .Range("A2").Select
Selection.Sort Key1:=Range("A2"), Order1:=1, Key2:=Range("B2"), Order2:=1, Key3:=Range("C2"), Order3:=1, Header:=0
End With
Worksheets("Sheet2").Select
sortFlg = True
Application.ScreenUpdating = True
End Sub

Public Sub FukkiSort() '元の順に戻す
If sortFlg = False Then Exit Sub

Application.ScreenUpdating = False
With Worksheets("Sheet1")
.Select: .Range("A2").Select
Selection.Sort Key1:=Range("E2"), Order1:=1, Header:=0
End With
Worksheets("Sheet2").Select
sortFlg = False
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

追加でご回答本当にありがとうございました。
これで、毎月の処理が楽になります。

お礼日時:2001/07/03 17:22

具体的に何をどのようにされたいのか著と分かりづらいので、この表をこのように転記したいという簡単なイメージをいただくことはできませんでしょうか。

    • good
    • 0

不特定のデータ数ですから、関数は使う気になりませんね。

下記VBAを書いてみました。

●データが入力されているシート="Sheet1"。請求書フォーマットのあるシート="Sheet2" とします。

 Sheet1のE列に連番を振ります。ソートしたデータを元に戻すためです。
 Sheet1のデータを商品名、売上日、伝票番号の優先キー順で並べます。(商品名は最優先です。後は自由)

 Sheet2がどのような形か分かりませんので勝手に想定しました。
 
  商品名
  AAA04
       売上日   伝票番号   請求額
      2001/7/ 9   1021     61,600
      2001/7/12   1020     46,700
      2001/7/14   1027     12,200  のように想定し、

   商品名の下のセルに範囲名:trsSyohin(上図のAAA04の場所)
   売上日の下のセルに範囲名:trsData(上図の2001/7/ 9の場所)
   Sheet1のA1(商品名という表題が入っている?)に範囲名:DataTop を付けます。

●Sheet2にコントロールツールボックスからボタンを貼り付けます。
 (表示→ツールバー→Visual Basic)

●ツール→マクロ→Visual Basic Editor でVBE画面に移り、Sheet2のコードウインドウに貼り付けます。
Private Sub CommandButton1_Click()
DataTensou
End Sub

●次は標準モジュールを挿入し(挿入→標準モジュール)貼り付け
Public dataNum As Long 'データ個数
Public rgDt As Range 'データ基準セル
Public rgTsyo, rgTdat As Range '商品転記セル、データ転記基準セル
Public cot As Long 'カウンタ
Public newSyohin As String '読み込んだ商品名
Public TensoNum As Long '転記した個数
Public endFlg As Boolean 'データ終了フラグ

Public Sub DataTensou()
Set rgDt = Range("DataTop") 'データ基準セル
Set rgTsyo = Range("trsSyohin") '商品転記セル
Set rgTdat = Range("trsData") 'データ転記基準セル
'
With rgTdat '書き込み済みデータを消去
If TensoNum > 0 Then
Range(.Cells(1, 1), .Cells(TensoNum, 3)).ClearContents
End If
End With
'
dataNum = Worksheets("Sheet1").UsedRange.Rows.Count - 1
With rgDt
TensoNum = 0 '転記した個数をクリア
newSyohin = .Offset(cot + 1, 0) '今度転記する商品名
rgTsyo.Offset(0, 0) = newSyohin
While newSyohin = .Offset(cot + 1, 0) And cot <= dataNum
rgTdat.Offset(TensoNum, 0) = .Offset(cot + 1, 1)
rgTdat.Offset(TensoNum, 1) = .Offset(cot + 1, 2)
rgTdat.Offset(TensoNum, 2) = .Offset(cot + 1, 3)
TensoNum = TensoNum + 1
cot = cot + 1
Wend
End With
'
If cot > dataNum Then
MsgBox "終了しました"
cot = 0: TensoNum = 0: endFlg = True
Else
'どちらかの「'」をはずすとプレビューか印刷を実行
'ActiveSheet.PrintPreview 'プレビュー(印刷範囲を設定すること)
'ActiveSheet.PrintOut '印刷(印刷範囲を設定すること)
End If
End Sub

Public Sub PrintALL() '全印刷
While endFlg = False
DataTensou
Wend
endFlg = False
End Sub

ボタンを押す毎に商品名単位で転記します。終われば、最初から繰り返せます。
自動印刷やボタン1発で全印刷とか・・・いろいろできそうです。(参考に書きました)
いつも長くなってしまう・・・デハ。

この回答への補足

nishi6さんお忙しい中回答ありがとうございます。
つたない説明文章からよくぞここまで意図をくんでいただけて
本当にありがとうございました。まさしく、自動ですべての商品に関しての
ソート、転記、印刷をしたかったのでした。(参考のコードが役にたちます。)
しかし・・。
元のデータが入力されているSheet1は

 商品名  売上日  伝票番号 請求金額 連番
  AAA  2001/6/1  0001   1000    1
  BBB  2001/6/2  0002   2000    2
  CCC  2001/6/3  0003   3000    3
  AAA  2001/6/4  0004   1000    4
  AAA  2001/6/5  0005   1000    5
  CCC  2001/6/6  0006   3000    6

にしましたが、上手くソートができなくて(?)Sheet2には

商品名
  AAA
       売上日   伝票番号   請求額
      2001/6/ 1   0001     1000

としかでてきません。
連続している場合には

商品名
  AAA
       売上日   伝票番号   請求額
      2001/6/ 4   0004     1000
      2001/6/ 5   0005     1000

とされるのですが何か原因はあるのでしょうか。
VBAに関しては初心者もいいところなので、記述を見てもなんとなくしかわかりません。
それとも、作成の仕方が悪いのでしょうか。
丸投げ状態で大変申し訳ございませんがもしよろしければアドバイスをよろしくお願い致します。

補足日時:2001/07/03 11:10
    • good
    • 0
この回答へのお礼

補足を書いた後、じっくりコードを眺めていましたら、
初めにデータをソート(並び替え)しておけばいいんですよね?
と、気が付きました。
nishi6さんも「ソートしたデータを元に戻すためです。」と
書かれているのに、慌てていて申し訳ございませんでした。
自分でもがんばって少しやってみます。

もし、意図されている事が違っていたり、いい案があるようでしたら
また、アドバイス下さい。よろしくお願い致します。

お礼日時:2001/07/03 12:17

 複数の商品を転記するのであれば、


商品名を何らかの形で数値化して(商品コード等とは別に、ソート順を決定させるものとして)
ソートに必要な2つめの要素(伝票番号順や日付順)を&でくっつけたものをVALUEで数値化します。
 月次での変動要因が、商品のソート順ですので、
商品の数値データは、一番上にしたい商品が一番大きい数値になるようにコンボボックスとVLOOKUPで引当ます。
 もし、販売件数が多い商品順であれば、COUNTIFで、順番つけられますよね。 
 そうして作成したソート用の数値をRANKで返せば、数値が大きい順にランキングできますので、
 その順にVLOOKUPで引っ張ってくれば、よろしいのでは。
月ごとのソート順にまったく法則性がなければ…、
 コンボボックスを29個つくるしかないのかなぁ。
マクロを使えばもっと簡単にできそうですが、
申し訳ありませんが、マクロは詳しくないもので。

 あまりお役にたてませんでしたね。
私の回答で、不明な点があれば、補足でお問い合わせくださいませ。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
確かにVLOOKUPでデータを引っ張ってくることはできるのですが
月毎のソートや商品名に法則性がまったくないために
その都度検索したい商品名をあてなければならないので
(まさしくコンボボックスを29個作成するはめに・・・・)
誰でも使用できるExcelファイルにならなくて困っていました。
ある程度Excelができる人ならこの方法でも可能なのですが・・。

でも、今後の参考にさせていただきます。
ありがとうございました。

お礼日時:2001/07/03 11:20

 補足恐れ入ります。


 なるほど、
伝票番号がユニークであるならば、
抽出条件は=商品&伝票番号でよいとして…

転記するシートには、
1:単一の商品(及びその行にぶら下がってる明細)だけ反 映させるのか
2:例えば、ある特定の取引先に売った商品全てを、
  月次で反映させるのか、
  (転記するシートに複数の商品が何らかの形で
   ソートされて反映されるのか)
これによって大分やり方は代わってくると思いますが、
まず簡単な1:の話でしたら、
 商品名のリストを作って、コンボボックスで、
反映される商品を選択式にして、VLOOKUPで引っ張ってくればいいですよね。
 =VLOOKUP(【コンボボックスで選んだ商品】,A列:B列,2,0)
(売上日の場合)

 複数の商品(鉛筆&ボールペン&消しゴム)
であるなら、2位以下のソート順は、何か約束があるのでしょうか?
 考えておきますので、不明な点等あれば補足ください。
    • good
    • 0

1枚の伝票(1個の伝票番号)に同一商品が複数なければ、


=商品&伝票番号 とくっつけて、
(商品、例えば鉛筆をいつ、どこに売ったのか選別するため)
VLOOKUPで請求書に引っ張ってきたら如何でしょう?
VLOOKUPで出たエラーは、ISERROR関数とIF式で、""(空白)にします。

 多分これだけでは完全な回答ではないと思いますので、補足ください。

この回答への補足

お忙しいところ回答ありがとうございます。
補足を要求されましたので、もう少し記述しますと、
商品は30種類の中から月毎にランダムで重複入力されていて伝票番号はユニークで重複はありません。例えば「鉛筆」という商品は今月伝票番号1,4,10で売上が上がっていたとすると「鉛筆」で集計した場合その商品に関する明細は3項目になります。
それを別のシートに転記したいのですが・・・。
VLOOKUPを使用すると1つしか抽出されないですし、毎月の検索条件も変わりますので上手くいかないのですが・・。
手動でソートをして、コピーすればいいのですが・・・。

補足日時:2001/07/02 15:51
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Qclipboxの使い方を教えて下さい。 動画のダウンロードのやり方が分からなくなりました。 どの項目

clipboxの使い方を教えて下さい。
動画のダウンロードのやり方が分からなくなりました。
どの項目をタップして動画をどうやって探してダウンロード出来るのか、ダウンロード出来た動画のプレイリストの作り方、動画再生等のやり方を知りたいです。
1年前は使っていたのに、1年して改めてインストールして「さあーやるぞー!」と思い挑んだんですが記憶してるやり方では何も出来ませんでした。
幼い子供でも分かるように詳しく教えて頂けたら助かります。
宜しく御願い致します。

Aベストアンサー

clipboxの公式サイトに使い方が出ています。
これ以上に分かりやすい資料はないと思います。
http://clipbox-official.com/usages/p/dl1

Qエクセルの関数を教えて下さい。 例 シート3 11月の売上集計 A 列 B列 C列 D列 1行 い

エクセルの関数を教えて下さい。

例 シート3 11月の売上集計
A 列 B列 C列 D列
1行 い ろ は
2行 りんご 3 2 4‥
3行 累計 15 12 13‥
4行 みかん 2 5 6‥
5行 累計 12 14 16‥
と売上の集計が続いています。
この時、2行目と4行目は手入力してます。
B3は=B2+10月シートB3となります。
C3はC2+10月シートC3となります。
5行目も同様です。
このシートをコピーして12月分を作った時、
B3は=B2+10月シートB3の10月を11月に
変更してます。
自動的に変更できる方法はないですか❓

Aベストアンサー

11月の
>シートをコピーして12月分を作った時、
>B3は=B2+10月シートB3の10月を11月に
>変更してます。
>自動的に変更できる方法はないですか❓
…と言う事ですか?
ならば月の数字をいじれば良いだけですので、CELL関数でシート名を取得して、それを加工しましょう。

 =CELL("filename",A1)
これで、このCELL関数が使われたシート名を含んだ文字列を取得できます。
 C:\Users\あさご\Documents\Excel_file\[売り上げとか.xlsx]12月の売上集計
のような値が返ってきますので、ファイル名の後ろにある「 ] 」の位置をFIND関数で見つけて、その次の文字から最後の文字までをシート名としてMID関数などで切り出し、
”月の売上集計”をSUBSTITUTE関数で削除する(空欄に置き換える)か、得られたシート名の先頭から「月」の文字の前の文字までを別途切り出す。
これで月の数字の部分を得ることができます。
あとはこの数字を足したり引いたりしてINDIRECT関数に入れて参照したいシート名にすればよいです。
1月には12月のシートを参照したいという事になるでしょうから、そのあたりも考慮して作りましょう。
(MOD関数を使うと良いかもしれない)

11月の
>シートをコピーして12月分を作った時、
>B3は=B2+10月シートB3の10月を11月に
>変更してます。
>自動的に変更できる方法はないですか❓
…と言う事ですか?
ならば月の数字をいじれば良いだけですので、CELL関数でシート名を取得して、それを加工しましょう。

 =CELL("filename",A1)
これで、このCELL関数が使われたシート名を含んだ文字列を取得できます。
 C:\Users\あさご\Documents\Excel_file\[売り上げとか.xlsx]12月の売上集計
のような値が返ってきますので、ファイル名の後ろ...続きを読む

QE-TAXについて動画による使い方を知りたい。

問い合わせ先が違うかもしれませんが確定申告のE-TAXの使い方について「動画」で詳細を解説したWEBサイトをご存じの方が
有ればURLを教えて下さい。「税務署から返事が来ない為」

使用OS:VISTA HP SP-2
使用ブラウザ:IE-8

Aベストアンサー

国税局のHPに使い方が載ってます。

参照ください

参考URL:http://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/tokushu/tvcm.htm

Q売上表から20日〆の請求書に転記

いつもお世話になります。
WINDOWS7 EXCELL2010です。

添付図で説明させていただきます。
上段がシート「売上表」です。
下段はシート「請求書」です。

日毎に「売上表」に記録していきます。
前月の21日~当月の20日締めで21日に請求書を作成します。

この時添付図でいうと、9/21~10/20を10月分として
「請求書」A2 に ID 0030 を入力
納品日  「売上表」B2 が 「請求書」B15 に
作業内容 「売上表」C2 が 「請求書」C15 に
と「売上表」から「請求書」に転記する数式をご教授いただけないでしょうか。

「売上表」A2 に ※これを手がかりと思ったのですがどんな数式かが思いつきません。
=IF(B2="","",MONTH(IF(DAY(B2)<=20,EDATE(B2,1),EDATE(B2,2))))


因みに 10/1~10/31 を10月分とするならできたのですが。
請求書 B15
=IFERROR(INDEX(売上表!B:B,SMALL(売上表!AC:AC,ROW(A1))),"")
売上表 AC2
=IF(AND(B2=請求書!$B$1,MONTH(B2)=MONTH($R$1)),ROW(),"")

いつもお世話になります。
WINDOWS7 EXCELL2010です。

添付図で説明させていただきます。
上段がシート「売上表」です。
下段はシート「請求書」です。

日毎に「売上表」に記録していきます。
前月の21日~当月の20日締めで21日に請求書を作成します。

この時添付図でいうと、9/21~10/20を10月分として
「請求書」A2 に ID 0030 を入力
納品日  「売上表」B2 が 「請求書」B15 に
作業内容 「売上表」C2 が 「請求書」C15 に
と「売上表」から「請求書」に転記する数式をご教授いただけないでし...続きを読む

Aベストアンサー

No.1です。

投稿後間違いに気づきました。
前回の数式ではA2のIDの条件が入っていませんでした。
A15セルの数式はそのままで

B15セルの数式(前回同様で配列数式)を
=IFERROR(INDEX(売上表!$A$1:$I$1000,SMALL(IF((売上表!$F$1:$F$1000=$A$2)*(売上表!$G$1:$G$1000=$H$3)*(売上表!$B$1:$B$1000>EOMONTH($H$5,-2)+20)*(売上表!$B$1:$B$1000<=EOMONTH($H$5,-1)+20),ROW($A$1:$A$1000)),ROW(A1)),MATCH(B$14,売上表!$A$1:$I$1,0)),"")
にしてください。

後の操作方法(B15セルをフィル&コピー)は一緒です。

どうも失礼しました。m(_ _)m

Q近いうちにYouTubeに動画をupしようと思って、 でも使い方がいまいちわからず、 試しにギャ

近いうちにYouTubeに動画をupしようと思って、

でも使い方がいまいちわからず、

試しにギャラリーにあったアーティストの動画を出してしまいました。

そうしたら著作権がなんとかかんとかでブロックされました。

捕まりますか?

試しの動画だったのですぐ消したんですけど...。

Aベストアンサー

捕まりませんよ。そんなことで捕まえていたら、警察はパンクします。

QExcelを分割 A列には日付、A列以外には営業担当者や商品や金額などが入力された列があります。 営

Excelを分割

A列には日付、A列以外には営業担当者や商品や金額などが入力された列があります。

営業担当者毎に、ファイルを分割するマクロをおしえてください。10人いれば、10ファイルできることになります。

営業担当者が入力されている列が資料により、異なるので、C列に営業担当者が入っている場合は、それをセルとかに入力して指定できる様にしたいです。

また、ファイルの出力先も指定できる様にしたいです。

よろしくお願いします。

Aベストアンサー

No.2 mike_gさんの質問ですが、回答者側から言わせてもらうと非常に重要なことです。
何故なら、質問者のレベルに合わせて回答しないと何の役にも立たないからです。
今回は、マクロの知識があると云うことなので、その前提で回答させていただきました。
こんな感じです。

Sub sample()
Set ws = ActiveSheet
ce = Range("営業担当者セル").Value
fp = Range("出力先").Value
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, ce).End(xlUp).Row
Set d.Item(Cells(i, ce).Value) = Cells(i, ce)
Next i
For Each i In d.keys
ws.Copy
Columns(ce).ColumnDifferences(d.Item(i)).EntireRow.Delete
ActiveWorkbook.SaveAs Filename:=fp & "\" & i & ".xlsx"
ActiveWorkbook.Close
Next i
End Sub

No.2 mike_gさんの質問ですが、回答者側から言わせてもらうと非常に重要なことです。
何故なら、質問者のレベルに合わせて回答しないと何の役にも立たないからです。
今回は、マクロの知識があると云うことなので、その前提で回答させていただきました。
こんな感じです。

Sub sample()
Set ws = ActiveSheet
ce = Range("営業担当者セル").Value
fp = Range("出力先").Value
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, ce).End(xlUp).Row
Set d...続きを読む

QDreamweaver 8 の使い方で、音声入りの動画サイト探しています。

 Dreamweaver 8 の使い方についてお願いします。初心者です、書籍と下記サイトを見ながら作成中です。Dreamweaver 8 の使い方で、音声入りの動画サイトがあればご伝授ください。有料で購入品があればご紹介ください。よろしくお願いします。

http://www.dougamanual.com/apps/tools/index.cgi?_cmd=view_select&l=ap&ai=35&g=ap

Aベストアンサー

アップグレードに関しては、アドビのサイトをご参照ください。

http://www.adobe.com/jp/products/dreamweaver/?promoid=BPBRI

Qソートについて教えてください。 ソートする時1列(計算式)が入っている部分だけ抜かしてできる方法はあ

ソートについて教えてください。

ソートする時1列(計算式)が入っている部分だけ抜かしてできる方法はありませんか。

例 abc egg
d列だけ抜かしてソート

よろしくお願いします。

Aベストアンサー

こんにちは

ANo1様が指摘していらっしゃいますが・・・
計算式が入っている列をソートに入れない場合(入れた場合も同様ですが)、ソート後のその列の値は、式の内容によっては質問者様の想定とは異なったものとなる可能性があるように思います。

なんとなくの想像ですが、ご質問の通りに行っても、D列を含めてソートした時と同じ結果になってしまいそうな気がしています。


とりあえず、ご質問内容を手作業で行うなう方法を考えてみます。
(ソートするくらいなので、D列の式はオートフィル可能なものと仮定します)
どこかの空き列(仮にJ列とします)を利用して、D列を退避しておいてソートし、D列を元に戻す方法とします。
1)D列を選択し、カット&ペーストでJ列へペースト
2)A:G列をソート
3)1)の逆にJ列をD列に戻す

…で可能なはずです。
もしも、頻繁にこの作業を行うのなら、一度、マクロの記録でマクロ化しておけば、次回からは簡単に繰り返すことが可能になります。

・・・とはいうものの、D列の式が例えば
 D1 = A1 + B1 とか
 D1 = SUM($B$1:B1) ←B列の累計を求める式
のような場合は、同じ式を戻しても、結果的に計算対象のセルの値が変わっているので、計算式は同じですが計算結果が変わり、D列も含めてソートした場合と同じ結果になります。
(実際の式が不明なのでわかりませんが、このようになるものが多いように思います。もちろん、同じにならない場合もありますが、その場合は、計算の意味が変わってしまう可能性がありそうです。)

値そのものを変えたくないという意味でしたら。上記1)~3)の手順のうち、
1)D列をコピーし、形式を選択してペーストでJ列へ値をペースト
3)J列をD列へ(式を残しておくなら別の列へ)コピペ
のように変えれば可能と想像します。
こちらの場合も、上記同様に、マクロの記録でそのままマクロ化が可能です。

・・・上記のどちらかで可能とは思いますが、D列を除いてソートした結果が(式の計算結果が)どうなるかを再確認なさった上で方法を考えるのが良さそうに思います。
(すでに検討済みでしたら、いらぬお世話でした。すみません。)

こんにちは

ANo1様が指摘していらっしゃいますが・・・
計算式が入っている列をソートに入れない場合(入れた場合も同様ですが)、ソート後のその列の値は、式の内容によっては質問者様の想定とは異なったものとなる可能性があるように思います。

なんとなくの想像ですが、ご質問の通りに行っても、D列を含めてソートした時と同じ結果になってしまいそうな気がしています。


とりあえず、ご質問内容を手作業で行うなう方法を考えてみます。
(ソートするくらいなので、D列の式はオートフィル可能なものと仮定し...続きを読む

Q携帯動画変換君の使い方…

カテ違いだったらスイマセン。

携帯動画変換君の使い方を教えてください!!
SO903iにyoutubeの動画を入れたいのですがやり方が分かりません…
http://so903i.jugem.jp/?page=1&cid=3
↑このサイトの2番の手順通りにやっても○○.mqvになりません!!!
お願いします。教えてください!!

Aベストアンサー

FOMAならわざわざ.mqvファイルを.3gpにしなくても、セットアップの上から3番目「3GPPファイル、音声AAC形式一般設定」を選択して変換すればいいと思いますが…。あとは上記のサイトの方法で見れるかと思います。ところでQuickTimeはインストールされていますか?

QExcel2013 VBA A列とB列の文字をA列とB列とC列に移動させる方法

A列とB列に文字が入っているのですが、下記のようにA列とB列とC列に文字を移動させたいです。
(A列の数字は必ず奇数のA列に入っています。)
VBAのコードを教えて下さい。

例えば
A1 1  B1 cat
A2 空白 B2 猫
A3 空白 B3 dog
A4 空白 B4 犬
A5 2  B5 whale
A6 空白 B6 クジラ
A7 3  B7 rabbit
A8 空白 B8 ウサギ

とデータがある場合

A1 1  B1 cat  C1 猫
A2 空白 B2 dog  C2 犬
A3 2  B3 whale  C3 クジラ
A4 3  B4 rabbit C4 ウサギ

としたいです。

実際、データは、A5196まであります。

Aベストアンサー

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

少しは短縮できると思います。m(_ _)m

No.1です。

>実際、データは、A5196まであります。

前回のコードは一つずつカット&ペーストしていますので
かなりの時間を要すると思います。
↓のコードに変更してみてください。

Sub Sample2()
Dim lastRow As Long
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.ScreenUpdating = False
With Range(Cells(1, "C"), Cells(lastRow, "C"))
.Formula = "=IF(MOD(ROW(),2)=1,B2,"""")"
.Value = .Value
.SpecialCells(xlCellTypeB...続きを読む


人気Q&Aランキング

おすすめ情報