問題タブ [listobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vba - テーブルを扱うときに明確で保守可能なコードを書く方法は?
私のプロジェクトでは、テーブルとその下にある ListObjects および ListColumns をよく利用します。そのままの Range オブジェクトよりも参照と更新が簡単なので、私はそれらを気に入っています。それでも、多くの ListColumns で構成され、プロジェクト内のすべてのワークシートで参照される複数の ListObjects を処理する、適切で保守可能な方法をまだ見つけていません。
少数の列 (Column1、Column2、...、Column10) を持つテーブル (TableA) を含むワークシート ((Name) プロパティを "WorksheetA" に設定) があるとします。
ここで、別のワークシートのコードから列の 1 つを参照したいと考えています。私は次のようにそれを行うことができます:
メンテナンスが難しく、エラーが発生しやすいため、文字列を直接使用することはお勧めできません。
ならどうしよう?
文字列を定数として格納するための専用モジュールを作成できます。たとえば、「Constants」というモジュール:
次に、私の参照は次のように変換できます。
ただし、このソリューションにはいくつかの欠点があります。
- 定数モジュールは、テーブルと列が追加されるたびに途方もなく速く成長します。
- 参照自体が大きくなり、読みにくくなります。
- すべてのワークブックのテーブルに関連するすべての定数は、1 つの巨大な穴に投げ込まれます。
WorksheetA 内に定数を格納し、次のようなパブリック関数を介して使用できるようにすることができます。
このソリューションは実際には上記の 3 つの問題をすべて解決しますが、新しいテーブルを追加すると各列に関数を作成する必要があるため、まだ少し「汚い」上に時間がかかります。
この問題に対処する方法について、より良い考えがありますか?
EDIT1 (わかりやすくするため):ユーザーが名前を変更してはならない (テーブル名も列名も) と仮定しましょう。ユーザーがそうした場合、それはユーザーの責任です。
EDIT2 (わかりやすくするため):例として、Column7 を列名として使用しました。列にもっと意味のある名前があると仮定しましょう。
c# - このコードが書き込まれた 2 つの行の間に空白行を挿入するのはなぜですか (C# Excel Interop)?
私の C# (.NET 4.5) Windows Forms アプリでは、Excel Interop を使用して、コードをここから次のように調整しました (Resharper によってグレー表示された冗長なものを削除し、「不足している」引数の前に「Type.」を追加します (大文字と小文字を次のように変更します)。アッパー):
ListObject は必要に応じて行 4、列 1 (または "A") に追加され、"果物" がセルに書き込まれますが、行 5 ("Apple" があるはずです) からではなく、行 6 から開始されます。ここで確認できます(不要な空白行が強調表示されています):
それには (もっと多くの) があるかもしれませんが、これは、ListObject が何を並べ替えてフィルター処理するかわからない理由の少なくとも一部である可能性があります。
空白行 5 が追加されるのはなぜですか?どうすればそれを防ぐことができますか?
c# - C# Excel Interop アプリで ListObject (並べ替え/フィルター) コントロールのセルの場所を指定するにはどうすればよいですか?
ここで、Excel スプレッドシートに "ListObject" (私は "Sort/Filter Control" と考えています) を追加する方法を見つけました。これを実現する方法の簡単な例を次に示します。
これにより、次の図に示すように、「ListObject」が入力されたセルの真上に配置されます。
ListObject をドロップダウンすると、次のようになります。
これは、その種の要件に対して素晴らしい機能です (ほんの少しのコードで大成功です)。ただし、月のデータの列を含むシートがあり、選択した月の列を除外する必要があります (並べ替えは不要であり、望ましくありません)。レポートの生成時に複数の月が選択された場合の外観は次のとおりです。
ただし、ユーザーは次のように、より少ない月数 (1 か月から 13 か月まで) のレポートを生成できます。
したがって、フィルタリング操作の範囲が表示されている月のデータ(多くの行、多くの列)にまたがる「ListObject」が必要であり、ユーザーが特定の月の選択を解除して、選択解除された月の行全体を非表示にする機能が必要です.
ただし、すべての月のデータの範囲を定義するこのコードでは、次のようになります。
問題は、複数の ListObjects が月のヘッダー列に沿って曲がり、その下の行を押し下げ、行の位置がずれることです。それだけでなく、彼らが提供する並べ替えとフィルター処理は、私の厳しい基準を満たしていません。月の列全体を除外する代わりに、次のようにします。
だから私が欲しいのは:
これは可能ですか?もしそうなら、どうすればそれを達成できますか?
excel - ListRows.Count が一貫性のない結果を返す
プロジェクトの 2 つの異なるワークシートに存在する 2 つの Excel テーブルに奇妙な問題があります。私は VSTO を使用していますが、VBA は同じ結果を示します。空のテーブルの行数には、ある場合は 0 行、別の場合は 1 行 (挿入行と推測されます) があります。
セットアップ
2 つのワークシート: Sheet1、Sheet2
対応する 2 つの名前付き Excel テーブル: Sheet1Table、Sheet2Table
両方のテーブルが空です。つまり、削除できない挿入行である空の行が 1 つあります。
次のコードを実行して、データ行の数を決定します (つまり、ヘッダー行を除く)。
と
結果はnumberOfListRows1
1 とnumberOfListRows2
0 ですが、結果 (正しい方) は同じである必要があります。テーブルとワークシートのプロパティ、および Visual Studio のソース ファイルを比較しましたが、違いは見つかりませんでした。私が何を探しているべきか(そしてどの結果が正しいものか)何か考えはありますか?
excel - ListObject 内の行をループして削除するのは非常に遅い
〜500行のListObjectテーブルがあり、名前付き範囲に4つの値もあります。
500 行に対して (ランダムに) 繰り返し発生する一意の値が 30 ある可能性があります。値が名前付き範囲にないすべての行を削除したいと考えています。
私は動作する次のものを持っていますが、予想よりも遅く実行されています(約2分):
ワークシート関数に依存しているのか、行をループしているだけなのか、速度が低下しているのかはわかりません。
リストオブジェクトをフィルタリングして残りを破棄する方法はありますか?
ユーザーが何かが起こっているのを見ることができるように、進行状況バーをチャックすることを考えていました...
c# - ListObjects を特定のフォーマット ファイルに書き込む
リストをシリアル化し、特定の方法でファイルに書き込みたいのですが、今はできません。ファイルは次のようになります。
しかし、私はこのようにそれが必要です
ファイルを 2 番目の形式のようにするにはどうすればよいですか? これは私のシリアライズされたアクションです:
excel - ListObject テーブルの特定の列から SpecialCells(xlCellTypeVisible) を選択する
ListObject テーブルの特定の列の可視セルのみを範囲オブジェクトに取得しようとしています。
これはうまくいかないようです。
しかし、これは範囲全体を選択し、最初の列をオフセットして他の2つの必要な列を選択すると機能します!
しかし、私の式は以下に示すリストオブジェクトの2つの列のみを参照しているため、式で上記を使用することはできません:
ワークシートの UDF 式:
そして私はそれを次のように使用しています:
画像からわかるように、「COLUMN」列のセルではなく、列「Brands」と「Index」の可視セル範囲のみが必要です。
したがって、私が望む可視範囲は次のとおりです。
@Jeeped の編集:
ワークシート セルから呼び出される UDF 関数があり、列 B と C の ListObject 範囲 (databodyrange 全体ではなくこれらの列のみ) を渡した場合、RngWrdLst の可視範囲を見つけるにはどうすればよいですか?
例えば
ワークシートからの呼び出し:
関数定義:
ところで、RngWrdLst には B と C の 2 つの列が含まれます。コードを変更して、関数から可視範囲のみを取得するにはどうすればよいですか?