Excelデータの抽出・転記についての質問

このQ&Aのポイント
  • Excelデータの抽出・転記について質問があります。具体的には、指定値以外の行データを抽出・転記する方法や、フィルターを使用して空欄行を畳み印刷する方法について知りたいです。
  • 私はExcelデータの抽出・転記を試みていますが、困難な点があります。具体的には、E列の数値から14000000を引き、指定の数値を加える関数式を作成しました。また、Y列にフィルターをかけて、E2の年月と異なる日付を表示し、それをコピーしようとしましたが、他の年月やデータの変化に対応できず、詰まってしまいました。
  • 私はExcelデータの抽出・転記に関して調べていましたが、結論に至れず迷っています。また、説明も不明確な状態で難しい作業に取り組んでいるため、相手にしたくない対象者だと自覚しています。しかし、何度も返信していただき、本当に感謝しています。もし不足している情報や不明確な点があれば、質問していただければと思います。
回答を見る
  • ベストアンサー

追記:指定値以外の行データを抽出・転記する為には

画像と共に説明を追加致します。 E2、Y4以下には変換した日付シリアル値が入力されています。 また年月は変化し、データの内容、行数も変化します。 添付画像は転記先別シートになります。 転記先シートは元データのシートと同じブック内に作成されています。 ◎Y列のE2の年月以外の行の ・Y列同行セルの年月データを別シートE7~14へ転記 ・E列同行セル(上4桁を指定数値に変更)をB7~14へ抽出 ・F列同行セル文字列をC7~14へ転記 ・S列同行セル数値をF7~14へ転記 ・T列同行セル数値をG7~14へ転記 ◎Y列がE2の年月でC列が遅もしくは再という文字列の行の ・Y列同行セルの年月データを別シートE16~23 ・E列同行セル(上4桁を指定数値に変更)をB16~23へ抽出 ・F列同行セル文字列をC16~23へ転記 ・S列同行セル数値をF16~23へ転記 ・T列同行セル数値をG16~23へ転記 その後、転記先シートの空欄行をフィルターで畳み印刷 私が試行したことは、E列数値から14000000を引き指定数値(360とした場合3600000)を加えれば目的の数値になるのではと関数式を作成したこと、 Y列にフィルターを掛け、E2年月と等しくない日付を表示し、それをコピーして添付した場合、他の年月、データで行数が変わった場合、対応出来なくなるのではと、そこで詰まってしまったこと。 accessで行ったら出来るのではと調べ結果どっちつかずになってしまっていました。 説明もおぼつかない状況で煩雑な事を行おうとしており、最も相手にしたくない対象者であることは自覚しています。 にも関わらず、何度もお返事を下さり、本当に感謝致します。 不足してる情報や不明確な内容がありましたら、ご質問下さい。 宜しくお願い致します。

  • SaHaRe
  • お礼率48% (143/297)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

前回のご質問(*)にて回答した者です。 * http://okwave.jp/qa/q8725926.html こちらからお尋ねしたことに関しては、残念ながら、ほとんどお答えを頂けていない状況のようです。新たに分かったことは、主な目的は転記だったということくらいです。 前回のご質問では、「質問者さん以外の方が同じファイルで作業されたい」とのことでした。私としては、前回の回答でも言ったとおり、セルへの数式のセットとオートフィルタ、場合によってはピボットテーブルなどを活用すれば、大抵のことは簡単に解決できるし、処理の種類からしてマクロが必要な感じはしないと思っています。しかし詳しい理由は分かりませんが、質問者さんとしては「どうしてもマクロで実現したい」とのご希望でした。質問者さんに情報の提供をお願いした理由は、主に、マクロ化のためです。そうしないと、ちんぷんかんぷんだからです。 こちらからお尋ねした項目を、次のとおり、再掲します。また、それぞれの問いに対する回答(質問者さんが提供される予定だった情報)を、こちらで勝手に想定しました。 (1) 具体的な値   ● E2 セル・Y 列は、ある年月の月初の日のシリアル値(「2014/8/1」など)のみ   ● B 列は、「'」を先頭に付加した文字列(「'平成26年5月」など)のみ   ● C 列は、文字列「遅」、「再」または空白のいずれかのみ   ● E 列のうち E2 以外は、8 桁の正の整数のみ   ● F 列は、文字列のみ   ● S 列・T 列は、数値のみ (2) 項目名   現状では、項目名セルは存在しない。 (3) シートの構造   シート名は、「記録」。E2 セルと、B ~ Y 列の 4 行目以下のみにデータが存在。ただし、4 行目以下であっても空白になっているセルを含む列があり、具体的には C 列、D 列、G ~ R 列、T ~ X 列。また、B ~ Y 列の全てが空白になっている行が 4 行目以下で初めて出現すると、その行は最終行であり、それより下の行には一切データが存在しない。セルの結合はシート上に存在しない。 (4) どんな値になってほしいのか。   「指定数値」を「360」と定め、C 列が「遅」または「再」である行については、E 列の上 4 桁を指定数値で置換。 (5) 何列欲しいのか。   E、F、S、T、Y の 5 列 (6) 結果シートは新規に挿入するのか。   「集計」という名前のシートが既存。マクロを実行するたび、この同一シートを上書き。 (7) どのように Excel ファイルを使用するのか。   共有フォルダに保管し、不特定多数の人が同一ファイルを更新。 (8) 同じ元データに対して、様々な方法で抽出を繰り返すのか。   転記元の各行のデータを時間とともに更新。抽出の方法は変えないので、何度も同じマクロを実行。 (9) 前回の回答 No.1 の内容ではお役に立たないならば、どうなればよいのか。   ●マクロを使ってさえいれば、それ以上の具体的な手法は、不問。    様々な手法が考えられるが、どんなコードでも構わない。   ●置換後、E2 セル、E、F、S、T、Y 列の値を別シートに転記。   ● Y 列が E2 に等しくない行については、転記先のシートの 7 ~ 14 行目に転記。    ただし該当する行数が 8 行を超える場合は、上から 8 行分のみを転記。   ● Y 列が E2 に等しく、かつ C 列が「遅」または「再」である行については、転記先のシートの 16 ~ 23 行目に転記。    ただし該当する行数が 8 行を超える場合は、上から 8 行分のみを転記。   ●転記元の E、F、S、T、Y 列がそれぞれ転記先の B、C、F、G、E 列となるように転記。    該当の行のうち、この 5 列以外は、転記しない。   ●転記元 E2 の日付を転記先 B26 に転記。   ●数式が記入されているセルについては全て、値のみ転記。 (10)年月やデータ内容、行数等が変わるのであれば、その範囲は何か。   ●数値と文字列については、(1)の条件を満たす限り、どんな値にもなり得る。   ●データの存在するセルの配置については、行数以外は変化しない。 (11)質問者さんが質問前に行ってきたという「試行錯誤」の具体的な内容   14000000 - 3600000 という計算のみ >添付画像は転記先別シートになります。 順序が逆です。元データの内容を把握するほうが先です。 今回の質問文の画像は見ず、前回の画像から想像をふくらまして、今回も回答を書いています。今回の質問文は、コピー元とコピー先のセルのアドレスが混在した文章になっているようですね。新しく参入される回答者さんにとっては、ますます難解かと思います。 本来であれば、ご質問の内容は、「全く難しくありません」。そうではなくて、質問の仕方が、はっきり言って良くないということを自覚してください。 >accessで行ったら出来るのではと調べ結果どっちつかずになってしまっていました。 この程度の処理が Excel でできないとしたら、Access でも同じことだと考えられます。 お手元の実際の Excel ファイルと比べて上の想定が異なっているという場合は、そちらで適切にコードを修正してください。マクロを作製する以上、必要な知識をご自分で習得しながら、メンテも行っていってください。 更なるご質問がある場合は、「それがまさに質問である場合は」対応します。しかし単に、質問者さんが行われるファイル作製作業の完成を手伝うためだけのコード修正であれば、こちらでの対応は遠慮します。ボランティア活動ですので、完全な決着を見られなかったのは残念ですが、これ以上の時間と労力を費やすことはできません。また、ここは本来、質問を行うところであって、業務委託の場ではありません。そういう意味でも、これ以上は遠慮します。 なお字数の関係で、コードは回答 No.3 に掲載します。

SaHaRe
質問者

お礼

お時間をさいて再度お返事頂き有難う御座います。 試行錯誤は私の出来る限りのことをもっと多く試してみたのですが、筆談で文章に出来るのが限られてしまいました。 的確に質問することも出来ない知識レベルの為、過度な負担をおかけしてしまい申し訳ありません。 でも責任感の強い方のようで時間を割いてアドバイスを下さり、嬉しく思っております。 教えて頂いたコードを参考に再度調べて完成を目指したいと思います。 本当に本当に有難う御座いました。

その他の回答 (2)

回答No.3

No.2 の続きです。字数の関係で、コードはこちらに載せます。実行すると、添付図のような感じになります。 Sub ExtractMonthlyData()   Dim LastRow As Long, RepNumber As Long, Cell As Range, i As Long, j As Long, n As Long   RepNumber = 360  '指定数値(整数)   With Worksheets("記録")     LastRow = .Cells(Rows.Count, "y").End(xlUp).Row     .Copy before:=Worksheets(1)   End With   With Worksheets(1)     With .Range("b2:y" & LastRow)       On Error Resume Next       .Value = .Value       On Error GoTo 0     End With     For Each Cell In .Range("e4:e" & LastRow)       Cell.Value = RepNumber & Right(Cell.Value, 4)     Next Cell     .Range("b3:y" & LastRow).AutoFilter field:=24, Criteria1:="<" & .Range("e2").Value     j = 4     For i = 4 To LastRow       If n = 8 Then Exit For       If .Rows(i).Hidden = False Then         n = n + 1         j = i       End If     Next i     On Error Resume Next     .Range("e4:f" & j).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("集計").Range("b7")     .Range("s4:t" & j).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("集計").Range("f7")     .Range("y4:y" & j).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("集計").Range("e7")     On Error GoTo 0     j = 4     .Range("b3:y" & LastRow).AutoFilter field:=24, Criteria1:=Format(.Range("e2").Value, "ggge""年""m""月""")     .Range("b3:y" & LastRow).AutoFilter field:=2, Criteria1:="遅", Operator:=xlOr, Criteria2:="再"     For i = 4 To LastRow       If n = 8 Then Exit For       If .Rows(i).Hidden = False Then         n = n + 1         j = i       End If     Next i     On Error Resume Next     .Range("e4:f" & j).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("集計").Range("b16")     .Range("s4:t" & j).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("集計").Range("f16")     .Range("y4:y" & j).SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("集計").Range("e16")     On Error GoTo 0     .Range("e2").Copy Destination:=Worksheets("集計").Range("b26")   End With   Worksheets("集計").Range("b7:g23").Borders.LineStyle = xlContinuous   Application.DisplayAlerts = False   Worksheets(1).Delete   Application.DisplayAlerts = True   Worksheets("集計").Select End Sub

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

いろいろ説明されているようですが、提示された質問内容では、質問のポイントが縛られていないため、何がしたいのかよくわかりません。 このような質問では、抽出先のシートのレイアウトはあまり重要ではなく、元データがどのようなデータで、どのような条件で抽出するのかだけが問題となります。 また前回の質問の続きなら、回答者にこれまでの経過がわかるように前回の質問のリンクを付けるようにしましょう。 >◎Y列のE2の年月以外の行の ・Y列同行セルの年月データを別シートE7~14へ転記 ・E列同行セル(上4桁を指定数値に変更)をB7~14へ抽出 ・F列同行セル文字列をC7~14へ転記 ・S列同行セル数値をF7~14へ転記 ・T列同行セル数値をG7~14へ転記 上記の質問も、いくつか質問項目がありますが、実際はY4セル以下に入力されているデータから、E2セルの値と異なる行だけを抽出したいという質問だけで、その数式あるいはマクロを応用すれば、ほかの列の質問も解決できるのではないでしょうか? たとえばF列の文字列を抽出するなら以下の式を入力して下方向にオートフィルします。 =INDEX(F:F,SMALL(INDEX(($Y$4:$Y$1000=$E$2)*10000+ROW($4:$1000),),ROW(1:1)))&"" S列の数値やシリアル値を抽出するなら以下のような数式になります。 =IF(上記のセル番地="","",INDEX(S:S,SMALL(INDEX(($Y$4:$Y$1000=$E$2)*10000+ROW($4:$1000),),ROW(1:1)))) ちなみに「E列同行セル(上4桁を指定数値に変更)」の意味が分かりませんが、この部分はご自分で対応できるのではないでしょうか? >◎Y列がE2の年月でC列が遅もしくは再という文字列の行の ・F列同行セル文字列をC16~23へ転記 このケースなら上記の式を以下のように修正します。 =INDEX(F:F,SMALL(INDEX((($Y$4:$Y$1000<>$E$2)+(($C$4:$C$1000<>"遅")*($C$4:$C$1000<>"再")))*10000+ROW($4:$1000),),ROW(1:1)))&"" 同様に他の列のセルも上記で説明した数値やシリアル値の場合の数式で対応できます。 >その後、転記先シートの空欄行をフィルターで畳み印刷 目的が不明です。 最初から空白を除いたセルだけ抽出すればよいのではないでしょうか? >私が試行したことは、E列数値から14000000を引き指定数値(360とした場合3600000)を加えれば目的の数値になるのではと関数式を作成したこと 何の計算をしているのか意味不明です。 おそらく、本当はもっと簡単な操作や関数で目的の表示ができるような気がしますが、ひとまず与えられた情報だけからの関数を使った回答例です。

SaHaRe
質問者

補足

前回の質問のリンクは、 http://okwave.jp/qa/q8723573.html となります。 前質問にお答えくださった方より頂いた情報の不足箇所を付け加えた追記質問です。 リンクを貼ればまた色々な方がご回答下さる機会が得られますよね。 無知が過ぎるので、情報追記でも不足があるかと思います。 関数式、参考に致します。 宜しくお願い致します。

関連するQ&A

  • 指定値以外の行データを抽出・転記する為には…

    試行錯誤したのですが、どの方法からもつまづいてしまうので、アドバイス頂ければ助かります。 ◎Y列からE2の年月以外(以前)の行のE列(上4桁を指定数値に変更)・F列・S列・T列のセルを別シートに転記 ◎Y列がE2の年月でC列が遅・再という文字列の行のE列(上4桁を指定数値に変更)・F列・S列・T列のセルを別シートに転記 ソート・関数等も使用し苦心しましたが、どうしても私の知識の範囲を超えた領域に入ってしまい、壁を超えられません。 VBAは学び途中の為、可能であれば関数・マクロ記録で解決出来ればと思います。 難しいようでしたら、VBAのプログラムをご教授下さい。 何卒、宜しくお願い致します。

  • 別シートの行を選択し対象列を転記するマクロ

    シート2のA~F列までデータがあります。 行数は10,000行です。(月ごとに100行くらい追加されます。) A列は項目がNO.で半角数字が連番で入力されてます。 セルA2→1 セルA3→2 セルA4→3 . . . セルA10000→9999 セルA10001→10000 という感じです。 シート1の セルI9に番号を入力すると シート2のその番号の行のB~F列の値を シート1のJ9~N9列に転記したいです。 例えば シート1のセルI9に100と入力したら、 シート2のA列が100と入力されているセルはA101ですから 101行目となります。101行目の各列の値を転記します。 ↓ シート1のセルJ9にシート2のセルB101の値を転記 シート1のセルK9にシート2のセルC101の値を転記 シート1のセルL9にシート2のセルD101の値を転記 シート1のセルM9にシート2のセルE101の値を転記 シート1のセルN9にシート2のセルF101の値を転記 シート1もシート2もセルの書式設定は標準。 B,E,F列は半角英数字の組み合わせで C,D列は半角数字のみです。 たまにF列に空白がある行があります。 B,F列は数字のみの場合もあります。 B,C,D,F列は数字のみの場合 「数値が文字列として入力されています」 となっています。 マクロで行いたいのですが記述そのものを教えてください。

  • Excel VBA データの転記

    Excel2003を使用しています。 Sheet1のB1セルとSheet2のB1セルのデータが一致したら、Sheet2のB1セル~E1セルのデータをSheet1のF1セル~Iセルに転記するというコードを書いています。 Sheet1のデータ最終行を取得して、上記の条件を満たさなかったSheet2のB1セル~E1セルのデータをSheet1のデータ最終行の1行下から順に転記するという内容を追加したいのですが、転記先の指定の仕方が悪いのか、希望通りになりません。 どなたか一例を示していただけないでしょうか? スマホからの投稿で、実際に書いているコードを記載できず、分かりづらくて申し訳ないのですが、よろしくお願いします。

  • VBAでのデータ転記処理

    下記の処理をVBAで作成したいのですが…。 Book "aaa" の "Sheet1" A |B |C |D |E |F |G |H |I |J |K 1 あ|い|う|え|お|か|き|く|け|こ|さ 2 た|ち|つ|て|と|な|に|ぬ|ね|の|は|ひ|ふ|へ 3 ま|み|む|め|も|や|ゆ|よ これをBook "bbb" の "Sheet1" に A|B|C|D|E 1 あ|い|う|え|お 2 か|き|く 3 け|こ|さ 4 5 た|ち|つ|て|と 6 な|に|ぬ 7 ね|の|は 8 ひ|ふ|へ 9 10 ま|み|む|め|も 11 や|ゆ|よ と言う風にデータを転記したいのです。 Book "aaa" の Sheet "Sheet1"のA~E列までは必ずデータが入っていますが F列以降は、データがある場合と無い場合があり データがなければ、そこのセル(行)は詰める。 さらに、Book "aaa" の1行を1セットとして、Book "bbb" で1セット単位で、空白行を設けたいのです。 上記例のように、1セットの行数は固定ではありません。 Book "aaa" の Sheet "Sheet1"のデータ行数は大量に(1000行以上)あります。 わかりにくいと思いますが、どなたかよろしく御願いします。

  • データ転記。うまく転記できないシートがあります。

    エクセルのデータ転記について助けてください。 現在 エクセルで職場で使用する現金出納帳を作成中です。完成間近なのにつまずいてしまいました。 作成にもう長い時間かかっるので今週中になんとか仕上げたいのです。 (職場での周りの目がこわくって・・・) どうかどうかよろしくおねがいします。 *各シートの説明 【シート1(元帳)】は記入用シート(1年間の経費等の入力をします) A1は表題 2行目はタイトル行で B列:月日、C列:曜日、:D列:経費部門コード(以下部C)、E列:経費部門名(D列の部C入力時に他シートにあるデータベースからLOOKUPで抽出して表示するようにしてます) F、G列は手入力用の内訳や備考の列、H列:収入金額、I列:支払金額、J列:差引残高。(I・J列は転記必要なしです) データはB3(日付)から入力します。 データ表の範囲はとりあえず100行目まで(A1からJ100) 【シート2~シート16(シート名はD列の経費部門コード番号です)】 こちらが転記先シートです。 A1に部門コード、B2に部門コード名(A1のコードでデータベースより抽出)2行目はB列:月日、C列:曜日、D、E列:内訳、備考、F:支払金額 【シート17(経費部門コードのデータベース)】 部門番号と部門名を表にして 元帳で入力の際 ここからひっぱってくるようになっています。 番号は15種類(経理上不規則な番号):1・2・4・5・6・7・8・9・10・12・20・21・22・仕・給(これをシート名にしてます) *希望する完成仕様 元帳(シート1)に入力したデータが同時に部門C別シート(15種類)に必要な項目だけ転記される。必要な項目は上記のシート説明参照。 *現在の作成状況 ・元帳のシート A3に'=COUNTIF($D$3:D3,D3)&D3 以下 A列はA3をコピー ・15枚の部門番号のシート B3(転記初期行)に'=IF(ISERROR(VLOOKUP(ROW(元帳!A1)&$A$1,元帳!$A$1:$I$100,2,0)),"",VLOOKUP(ROW(元帳!A1)&$A$1,元帳!$A$1:$I$100,2,0)) C3,D3,E3,F3列はB3をコピーしLOOKUPの列番号を変更 *現在の状況と問題点 シート4・5・6・7・8・9・10・12・20・21・22はきちんと転記する。 シート1(部門C:1)は部門C:1と部門C:21のデータが転記されてしまう シート2 (部門C:2)は部門C:2と部門C:12と部門C:22のデータが転記されてしまう。 この2つのシートは 下1桁でひっぱってきてしまってるのは分かるのですが改善方法が分かりません。 どうかこの2シートがきちんと動く数式を教えていただけるでしょうか? 文章力不足のため 質問の理解にさぞ悩まれるでしょうがどうぞよろしくお願いします。 補足:01 02 04と 二桁でもしてみましたが反応は同じ。 よく分からなくて セルの表示変えても値は1・2・4になってしまうんです・・。 結局よく分かりませんでした。

  • エクセルで指定した行数毎に行データを抽出したい

    いつもお世話になっております。 最近データ処理で何度も表題にある処理をしているのですが、何とか簡単にできないかと質問させて頂きます。 決まった書式のデータシートから、指定した行から指定した行までの間で指定した行数置きに別のシートに抜出したいのですが。 例えば、18行目から1500行目迄の間で、3行おきに抽出したい、というような感じです。 現在は、条件付き書式で=MOD(ROW(),3)=1というような式でセルに着色して、色フィルタで不要な行を削除してそれを別シートにコピペして・・・ で何とか処理しています。 尚、贅沢を言えば、シート上の決まったセル(A1、B1、C1・・)に上記の条件(開始行、最終行、行間隔)を入力して、「新規Sheet」に抽出出来れば最高です。 また、例えば手作業で簡単に出来る作業(空白行を削除したシートで・・)等はその旨の条件付きで全くOKですのでよろしくお願いします。

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • 指定した数だけデータをコピペする方法

    VBAの参考例を教えてください。 <シート1> A列に1から順に数字が入力されており、B列からE列まで数値のデータが入力されています。F列にはB列からE列にデータが入力されているセルの数をカウントした関数が入力されています。 <シート2> シート1のB~Eに入力されたデータが縦に入れ替えの上A列にコピぺされています。 ここで、シート1のA列の数値をコピーし、シート1F列に示されたデータ数分だけ、シート2のF列に縦に順々にペーストしていく方法をご教示ください。シート1のA列に入力された数値が最後の行にくるまでこれを繰り返します。 シート1 A B C D E F 1  a b c d 4 2  e d f   3 3  d e     2 ・ ・ ・ シート2 A B C D E F a         1 b         1 c         1 d         1 e         2 d         2 f          2 d         3 e         3 当方、VBAは全くの初心者です。急遽仕事で必要になってしまい、質問しました。 どうぞよろしくお願いします。

  • EXCELで分かれたシート間の同一データ行を自動削除して結合したい

    EXCELで、シート1、シート2に分かれたデータがあります。 それぞれのシート間でC列~F列の値が重複している行、シート1側のG列の数値がマイナス になっている行を自動で削除してからデータを1つのシートに結合する方法を探しています。 条件は、シート1側の重複データ行のみを削除し、シート2側のデータが必ず残る方法であ る必要があります。G列のマイナス行を削除するのはシート1側のみです。 シート1がA列~I列、約3万行、シート2がA列~K列、約1千行くらいです。 シート2側のみJ列~K列(数値データが入っています)が存在しますが、シート1側は空欄です。 列の数は変わりませんが、行数が都度変動しますのでマクロでコピー先のセル位置を決め打ちする 事が出来ません。 1つのシート上で重複するデータを削除する方法は見つける事が出来たのですが、残す方のデータ が指定出来ないのと、複数のシート上の重複データを削除する方法が見つかりませんでした。 何か良い方法がありましたら、ご教授下さい。

  • セルの書式が標準なのに文字列にできるのはなぜ?

    会社のシステムで吐き出したデータですが セルの書式設定が標準なのに文字列となっています。 マクロを利用して、あるセルの値を別セルへ転記すると、 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。 会社のシステムが吐き出したエクセルはセルの書式が標準なのに 中の数字が文字列でいられるのが疑問です。 会社のシステムの吐き出したデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) 0101という値のセルでも 表示は0101ですが 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) それらのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 (0101は101になります。) まっさらなエクセルに自分で手入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに会社のシステムの吐き出しデータは セルの書式設定が標準なのにもかかわらず 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっています。 手入力で書式設定が標準の状態でセルに12345678901234 と表示させるには先頭に ' をつける方法しか知りませんが ' が無いのに表示されています。 でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると 1.23457E+13 となります。 またシステムが吐き出したエクセルの同じシート内に 以下のマクロで転記すると ↓ Sub 転記() 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Range("A2") Else Cells(行, 7).Value = Range("A3") End If 行 = 行 + 1 Loop End Sub ↓ このマクロだと A列~F列が書式設定が標準なのに文字列として表示されているのですが 転記先のG列が書式設定が標準であっても 12345678901234 (数値が文字列と保存されています と注釈有) と同じ状態のまま転記できます。 新しいBOOKのシート2に 会社の吐き出しデータをシートコピーした後、 (セルの書式設定:標準だが文字列で表示されている) そのBOOKに登録されているマクロで シート2のセルからシート1のセル(書式設定:標準)に転記すると 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示 となってしまいます。 ちょっと混乱しています。 理屈等教えていただければと思います。お願いします。

専門家に質問してみよう